Как после выполнения команды определить, был ли код выхода установлен bash или выполненной командой?

Are these programs in Linux and BSD the same?

Короткий ответ::Не обязательно.

Исходный код распространенных программ, таких как ls, cat, echo, killи т. д., зависит от пользовательского пространства , из которого они исходят. Другими словами, пространство пользователя, которое использует ваша система. Наиболее распространенным пользовательским пространством, используемым с ядром Linux, является GNU -, отсюда и название GNU/Linux. Однако другие пользовательские области были интегрированы с ядром Linux.

BSD обычно имеют собственное пользовательское пространство, которое разрабатывается отдельно от других, таких как GNU. Даже сами BSD имеют разные кодовые базы. Например, и FreeBSD, и OpenBSD имеют «пользовательскую среду BSD», но их кодовая база отличается. Если вы посмотрите на их справочные страницы (ps, например ), у них есть разные аргументы, которые можно использовать.

Одной из причин, по которой POSIX был разработан, было решение проблемы множественных кодовых баз. Если общие утилиты, поставляемые с пользовательским пространством, совместимы с POSIX, вы можете быть уверены, что они будут работать (почти )одинаково, независимо от того, получены ли они из GNU, FreeBSD, OpenBSD, AIX или других систем на базе UNIX.

Как вы, наверное, знаете, пользовательские пространства, перечисленные выше (, за исключением AIX ), имеют открытый исходный код. Не стесняйтесь ковыряться в их репозиториях кода, и вы быстро увидите, что они не совсем одинаковы.

Примечание :Несмотря на то, что GNU/Linux является наиболее популярным, в прошлом предпринимались попытки использовать пользовательское пространство GNU с ядрами FreeBSD/NetBSD. Подробнее о них можно прочитать в википедии здесь .

5
22.06.2020, 18:19
1 ответ

Мне неизвестен какой-либо подход к такой дифференциации после запуска команды. Но если вы примете условие гонки, тогда для вас может быть достаточный вариант.

Вместо

cmd with "$params" and </re/di/rections

ты делаешь

if : with "$params" and </re/di/rections; then
   # expansion and redirections are OK
   # let's hope no redirection-relevant paths are deleted or created in the meantime
   # and, of course, this does not work well with noclobber
   cmd with "$params" and </re/di/rections
else
   : error "outside" the command
fi
1
18.03.2021, 23:25

Теги

Похожие вопросы