Некоторые ресурсы истории Unix говорят, что CD был внешней командой в некоторый (довольно ранний) период разработки Unix. Это было специальной командой, которая смогла изменить текущий каталог родителя.
Вы видите рудименты этого исторического состояния в том, что Солярис имеет/usr/bin/cd как реальную команду, кроме того, для окружения builtins. Но я не уверен, это делает что-либо реальное в существующих системах.
Причем этот, поскольку внешняя команда была временным решением, которое истреблялось, как только разработчики Unix стали способными иметь оболочку builtins. Слишком дорого иметь целую команду (который должен иметь собственный процесс, быть загружен из диска, и т.д.) в месте, где простой системный вызов достаточно. Таким образом, это стало встроенным и, начиная с этого, не сделал изменял его состояние когда-либо.
Можно было создать оболочку, где почти любая команда становится встроенной; это - только своего рода компромисс дизайна. Например, CP, упомянутое здесь, могло быть хорошим кандидатом на это; и такое здание - в было реализовано в некоторых оболочках для MS-DOS. Но, в Unix, создании процесса и запуске является более дешевым, и нет никакой потребности изобрести функционально внутренне, если это не могло быть реализовано от другого процесса. Это включает CD, ulimit, выход, переменные манипуляции, команды потока управления (если, поскольку, в то время как, и т.д.) и т.д.
file
говорит Вам “расширенный Текст ASCII неISO”, потому что он обнаруживает, что это:
Необходимо выяснить, в котором кодирование этого файла, кажется, находится. Можно попробовать автоматическое распознавание Enca. Вы, возможно, должны были бы пошагово переместить его в правильном направлении путем сообщения его в том, каков язык текст.
enca x.txt
enca -L polish x.txt
Для преобразования файла передайте -x
опция: enca -L polish x.txt -x utf8 >x.utf8.txt
Если Вы не можете или не хотеть использовать Enca, можно предположить кодирование вручную. Немного оглядывания, сказанного меня, что это - польский текст и слова, является trwały, stały, usuważ, таким образом, мы ищем перевод где ³
→ ł
и æ
→ ż
. Это похоже на латинские 2 или латинские 10 или более вероятно (данный “не-ISO” CP1250, который Вы просматриваете как latin1. Для преобразования файла в UTF-8 можно использовать перекод или iconv.
recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt
Вы пытались узнать, какое точное кодирование является x.txt? Вы получите список поддерживаемой кодировки с
iconv - список
Иногда это происходит со мной, что я получаю несоответствие между latin1 и utf8. Затем это часто помогает преобразовать его из и назад к utf8 и наоборот.
Откройте текстовый файл с помощью gedit и в диалоговом окне «Сохранить как ..» вы увидите текущую кодировку.
Я создал сценарий автоматического преобразования с использованием библиотеки enca , я использую его на моем NAS для преобразования субтитров в UTF-8, но его можно использовать для любого автоматического преобразования
Не стесняйтесь использовать :)
РЕДАКТИРОВАТЬ:
#!/bin/bash
LANGUAGE=czech
TO=utf8
CONVERT="enca -L $LANGUAGE -x $TO"
# Find and onvert
find ./ -type f -name "*.srt" | while read fn; do
IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'`
if [ "$IS_TARGET" != "UTF-8" ] &&
[ "$IS_TARGET" != "UCS-2" ] &&
[ "$IS_TARGET" != "Macintosh Central European" ] &&
[ "$IS_TARGET" != "Unrecognized" ] &&
[ "$IS_TARGET" != "7bit ASCII" ] &&
[ "$IS_TARGET" != "KOI8-CS2" ]; then
echo "${fn} ---- Will be converted!"
# optional backup of original srt
# cp "${fn}" "${fn}.bak"
$CONVERT "${fn}"
fi
done
< x.txt > x.utf8.txt
Почему мы используем<
и затем>
?Как это работает? – Filip Bartuzi 09.01.2015, 12:01<
и>
выполните входное и выходное перенаправление соответственно. – Gilles 'SO- stop being evil' 09.01.2015, 13:03