Рекомендуется ли использовать командную команду оболочки :
null на предположительно переносных сценариях? Он справляется с csh, zsh, tcsh и любой оболочкой, которая может существовать там?Является ли оболочка: команда портативной?
ответ
Да. Это стандарт null служебная программа. Справка: http://pubs.opengroup.org/onlinepubs/000095399/utilities/colon.html
Хотя POSIX называет его «полезной» (что для меня подразумевает, что оно является внешним по отношению к оболочке), это на самом деле * встроенный * во всех которые я проверил (в том числе [Heirloom Bourne Shell] (http://heirloom.sourceforge.net/sh.html)), и его нет в файловой системе (по крайней мере, на моем). –
@DennisWilliamson Слово * Утилита * не подразумевает встроенную информацию в том или ином виде. Bash и ksh говорят, что они совместимы с частью IEEE 1003.1 для Shell и Utilities, но в основном они не создают дополнительных исполняемых файлов за пределами 'bash' и' ksh', поэтому, чтобы быть совместимыми, они должны сделать эти утилиты встроенными. – kojiro
@DennisWilliamson [здесь немного более конкретное доказательство] (http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_14): * Специальные встроенные утилиты в этом разделе не обязательно должны предоставляться в доступный через семейство функций exec, определенное в объёме системных интерфейсов IEEE Std 1003.1-2001. * (Совет шляпы: pgas on Freenode/# bash) – kojiro
Конечно, :
встроенный уже в Thompson shell - это documented для Unix V6 в 1975 г. Это старше таких часто используемых функций, как PATH
переменной, перенаправление STDERR с 2>
, и команда cd
(затем пишется chdir
).
В корпусе Томпсона :
обозначен ярлыком для команды goto
. Если вы никогда не пытались позвонить goto
по строке, начинающейся с :
, эта строка была фактически комментарием. Bourne shell, предок оболочек Bourne/POSIX, как мы их знаем, никогда не имел goto
, о котором я знаю, но сохранил :
как команду no-op (он уже присутствовал в Unix V7).
tcsh и csh имейте это (как и другие). Большинство будет принимать несущественные аргументы, но ':' в csh отказывается. Но это еще одна [черная метка] (http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/). –
Кстати, bash не полностью подчиняется спецификации POSIX для ':', если только он не был создан с помощью 'bash -posix'. Для '' POSIXLY_STRICT' bash '' 'существует, но не приводит к тому, что назначения переменных сохраняются. – kojiro
Имеет ли смысл спрашивать о csh, когда речь идет о переносимости оболочки? csh настолько отличается, что попытка создать скрипт, который делает что-либо полезное для работы как в csh, так и в bourne shells, кажется бесполезным. (Написание скрипта, который делает что-нибудь полезное в csh, кажется бесполезным, но это совсем другая история.) –