Может кто-нибудь привести эти инструменты в порядок переносимости? Что из этого наверняка можно найти даже в самых минимальных * nix системах? Кто-нибудь из них на 100% обязательно присутствует? Я предполагаю, что порядок следующий:
- AWK
- СЭД
- ш
- Perl
Хотя я представляю, что есть системы, которые по умолчанию не используют оболочку Борна, какая-то оболочка будет присутствовать по умолчанию, будет ли она всегда /bin/sh
? Предположительно нет, если это не оболочка борнового типа. Как awk
и sed
есть страницы , объясняющие их на спецификации POSIX , так предположительно , они всегда будут присутствовать. Это так? Могу ли я быть уверен, что оба будут установлены на любой * nix? Включая встроенные системы?
posix
portability
Тердон
источник
источник
sh
,awk
и,sed
например, и мой NAS на основе busybox также имеет Perl.Ответы:
sed
,sh
Иawk
портативны уточняются по стандарту POSIX,perl
не так не поддерживается стандартом.Если вы придерживаетесь совместимого кода, не должно быть порядка переносимости для трех команд POSIX.
Три POSIX, наряду со многими другими утилитами, являются обязательными для операционной системы POSIX. Операционные системы, в которых отсутствуют некоторые из них из-за минимизации или предоставления неполных / несоответствующих реализаций, все же существуют.
На самом деле, большинство (если не все) бесплатных и открытых Unix-подобных операционных систем, вероятно, не пройдут процесс соответствия, если они попытаются, и в любом случае никогда не попытаются.
Я был бы удивлен, обнаружив * nix-подобную ОС без оболочки на основе синтаксиса Bourne, но все возможно, особенно со встроенными системами.
/bin/sh
скорее всего, это оболочка семейства синтаксиса Bourne, но не гарантируется совместимость с POSIX, даже в системах, совместимых с POSIX. Например, он установлен/usr/xpg4/bin/sh
на Solaris 10 и более ранних версиях, в то время/bin/sh
как это устаревшая оболочка Bourne, отличная от POSIX.источник
Обратите внимание на Autotools: придерживайтесь наименьшего общего знаменателя оболочки Bourne и POSIX - возможно, дополненного
sed
- если вам нужно написать что-то, что должно работать везде . Могут существовать системы, в которых что-то ломается, но вы можете обойти такие проблемы, переписав.Например, некоторые древние системы имеют проблемы с ошибками расширения в
test
, иначе[
:поэтому практика Autoconf заключается в том, чтобы переписать его в двойных кавычках с односимвольным префиксом, например так:
Вы также можете использовать
"x$foo"
здесь. Это защищает от возможности того, что это$foo
может быть допустимым параметромtest(1)
, и поскольку[
является псевдонимом дляtest
, оно может неправильно интерпретировать выражение. Решение состоит в том, чтобы создать ситуацию, с которой[
всегда начинается неизвестный аргументx
, что означает, что он не может иметь особого значения[
.(Autoconf также рекомендует использовать
test
вместо[
, но этот совет возникает как реакция на возможные конфликты с M4 , который также использует[
в своем синтаксисе.)awk - это POSIX , поэтому теоретически он доступен везде. Это даже в Busybox , так что у вас будет
awk
реализация даже в некоторых очень ограниченных встроенных системах Linux. Тем не менее, я был бы менее удивлен встретить систему безawk
чемsed
. Я полагаю, все сводится к сложности: более простые инструменты с большей вероятностью выдержат агрессивную сортировку.Perl не является частью какого-либо широко распространенного стандарта, POSIX или другого, поэтому вы просто не можете рассчитывать на него, если ничего не знаете заранее о целевой среде. Perl не установлен по умолчанию в:
В руководстве Autoconf есть глава по программированию переносимых оболочек, которая должна быть вам полезна. В последнем разделе охватывает такие инструменты , как
sed
,awk
и многие другие.источник
sh
иsed
являются наиболее портативными. ОК, а кто из других? Иsh
действительно ли это портативный? Что если оболочка по умолчанию является производной C-оболочки? Будет ли у такой системы символическая ссылка/bin/sh
?sed
иawk
обеспечиваются с помощью BusyBox, почему бы вы более удивлены найтиsed
отсутствующий? Есть ли у вас идеи, если альтернативы busybox также предоставляют sed и awk?sed
делает меньше, поэтому его двоичный файл будет меньше, следовательно, есть меньше причин для его удаления, чемawk
, что довольно сложно. (20 КБ против 48 КБ в моей системе.) Re: Альтернативы Busybox , я не знаю какой-либо другой альтернативы «одного окна».sh
- странным, что тердон занимает местоawk
иsed
выше этого o_O?), Хотя это только совпадает с целями Autotool, поскольку некоторые среды, особенно маленькие, не может быть предназначен для строительства, точка./bin/sh
, то все по-другому, но я не знал, что у всех будет один. Извините за то, что не принял это, кстати, я разрывался между вашими и jlliagre ответами, оба из которых ответили на мой вопрос. Я выбрал его, потому что он обратился к нему более прямо и потому, что у него меньше представителей :).