Каково различие между ударом и sh?

Я вижу два типа используемого кода:

#!/usr/bin/sh

и:

#!/user/bin/bash

Я искал это онлайн, и мнения варьируются много. Объяснения, которые я видел на большинстве веб-сайтов, говорят это sh является более старым, чем bash, и это там не реальная разница.

Кто-то знает различие между ними? Можно ли дать мне практический пример, когда использовать один по другому?

28
задан 01.07.2013, 12:38

4 ответа

bash надмножество sh т.е. все можно выполнить sh можно выполнить bash.

Bash имеет больше функций (ветвление, builtins, массивы) создание сценария, легче записать. Некоторые позже *nix'es имеют /bin/sh как ссылка на /bin/bash

Для полного объяснения того, что вот учебное руководство

34
ответ дан 07.12.2019, 09:24

Традиционно,/bin/sh была бы исходная Оболочка Bourne, которая не имеет никакой истории или редактирования командной строки и никакого управления заданиями.

Приблизительно в течение прошлых 15 лет или так, большинству Unixes установили оболочку POSIX, или по крайней мере ksh или удар (которые очень почти подобны POSIX), но все еще имейте более ограниченную оболочку в/bin/sh

Причина этого состоит в том так, чтобы более старые сценарии оболочки, которые ожидают более старое sh команда будет все еще работать.
Начиная с символов как {, } и ! имейте особое значение для избиения, возможно, что более старый сценарий оболочки с помощью тех символов (не выходя из них) мог перестать работать.
(Оболочка Bourne взяла бы !!{1,2} буквально, тогда как удар интерпретировал бы это как повторение предыдущей команды (!!) сопровождаемый расширением фигурной скобки).

На Linux, хотя, sh команда является почти всегда просто ссылкой на bash, со всем одинаковым функции.

6
ответ дан 07.12.2019, 09:24

На самом деле, даже при том, что/bin/sh может быть ссылкой на/bin/bash, если запущено как sh это ведет себя по-другому. Из страницы справочника удара:

Если удар вызывается с именем sh, это пытается подражать поведению запуска исторических версий sh максимально тесно при приспосабливании стандарту POSIX также.

Так как sh, это пытается эмулировать историческое sh поведение. Как bash, это пытается быть максимально полезным как интерактивная оболочка входа в систему.

2
ответ дан 07.12.2019, 09:24

Во многих системах и в Солярисе, в частности, динамично связан удар, в то время как sh статически связан. Это может изложить угрозу нарушения безопасности, поэтому пользователь root должен только использовать/bin/sh в качестве оболочки (если когда-нибудь необходимо регистрироваться как корень).

2
ответ дан 07.12.2019, 09:24

Теги

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