file
команда делает "лучшие предположения" о кодировании. Используйте -i
параметр для принуждения file
распечатать информацию о кодировании.
Демонстрация:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
Вот то, как я создал файлы:
$ echo ä > umlaut-utf8.txt
В наше время все - utf-8. Но убедите себя:
$ hexdump -C umlaut-utf8.txt
00000000 c3 a4 0a |...|
00000003
Сравните с https://en.wikipedia.org/wiki/Ä#Computer_encoding
Преобразуйте в другую кодировку:
$ iconv -f utf8 -t iso88591 umlaut-utf8.txt > umlaut-iso88591.txt
$ iconv -f utf8 -t utf16 umlaut-utf8.txt > umlaut-utf16.txt
Проверьте шестнадцатеричный дамп:
$ hexdump -C umlaut-iso88591.txt
00000000 e4 0a |..|
00000002
$ hexdump -C umlaut-utf16.txt
00000000 ff fe e4 00 0a 00 |......|
00000006
Создайте что-то "недопустимое" путем смешивания всех трех:
$ cat umlaut-iso88591.txt umlaut-utf8.txt umlaut-utf16.txt > umlaut-mixed.txt
Что file
говорит:
$ file -i *
umlaut-iso88591.txt: text/plain; charset=iso-8859-1
umlaut-mixed.txt: application/octet-stream; charset=binary
umlaut-utf16.txt: text/plain; charset=utf-16le
umlaut-utf8.txt: text/plain; charset=utf-8
без -i
:
$ file *
umlaut-iso88591.txt: ISO-8859 text
umlaut-mixed.txt: data
umlaut-utf16.txt: Little-endian UTF-16 Unicode text, with no line terminators
umlaut-utf8.txt: UTF-8 Unicode text
file
команда понятия не имеет о "допустимых" или "недопустимых". Это просто видит некоторые байты и попытки предположить, каково кодирование могло бы быть. Как люди мы смогли распознавать, что файл является текстовым файлом с некоторыми умляутами в "неправильном" кодировании. Но как компьютер этому был бы нужен своего рода искусственный интеллект.
Можно было бы утверждать что эвристика file
своего рода искусственный интеллект. Все же, даже если это, это - очень ограниченное.
Вот больше информации о file
команда: http://www.linfo.org/file_command.html
Используйте эту команду: type assemble.sh
Это работает во множестве оболочек и показывает только первый результат.
Или разделение путь и использование это в находке - первое соответствие должно быть решением
find ${PATH//:/ } -maxdepth 1 -name assemble.sh -print -quit
type
конечно, более легко.
find
– Ehtesh Choudhury
10.01.2013, 10:33
Можно использовать удар, но синтаксис which
вывод показывает использование старого which
записанный в csh. ПУТЬ обнаруживается заключенный в кавычки круглыми скобками, и каталоги в ПУТИ имеют записи как /opt/SUNWspro/bin
и /usr/ccs/bin
которые только имеют смысл в Солярисе. Это последовательно: Солярис использовал csh which
.
Вот мое предположение: у Вас есть один ПУТЬ для удара и другой для csh. Это могло бы быть системной проблемой. Как я вспоминаю, Солярис сохраняет/etc/profile и/etc/cshrc файлы для установки PATH в масштабе всей системы. Те два файла инициализации могли бы установить различные переменные ПУТИ для различных оболочек. Действительно "повторите $PATH" под ударом и посмотрите, соглашается ли он с какой which
команда распечатывает как строка ПУТИ.
assemble.sh
, который не важен здесь.
– Gilles 'SO- stop being evil'
14.03.2011, 00:22
locate
также дал бы ему местоположение того, которое он хочет. assemble.sh
не такое общее имя файла, таким образом, он, вероятно, найдет файл легко (который является тем, что OP запрашивает).
– nico
14.03.2011, 00:50
updatedb
прежде locate
выставочные результаты?
– glenn jackman
14.03.2011, 02:02
updatedb
ежедневно выполняется как задание крона, но да, Вам, вероятно, придется вызвать его, если файл является очень недавним.
– nico
14.03.2011, 02:15
command -v assemble.sh
Информация
-v print a description of COMMAND similar to the `type' builtin
ASSEMBLE=$(PATH=/usr/bin:/usr/local/opt/coreutils/libexec/gnubin command -v assemble.sh)
– nhed
15.07.2016, 18:36
type assemble.sh
, который является портативным (и только показывает первое соответствие тогда какtype -a
конструкция ksh/bash должна показать все соответствия). – Gilles 'SO- stop being evil' 14.03.2011, 00:24