Я вижу два типа используемого кода:
#!/usr/bin/sh
и:
#!/user/bin/bash
Я искал это онлайн, и мнения варьируются много. Объяснения, которые я видел на большинстве веб-сайтов, говорят это sh
является более старым, чем bash
, и это там не реальная разница.
Кто-то знает различие между ними? Можно ли дать мне практический пример, когда использовать один по другому?
bash
надмножество sh
т.е. все можно выполнить sh
можно выполнить bash
.
Bash имеет больше функций (ветвление, builtins, массивы) создание сценария, легче записать. Некоторые позже *nix'es имеют /bin/sh
как ссылка на /bin/bash
Для полного объяснения того, что вот учебное руководство
Традиционно,/bin/sh была бы исходная Оболочка Bourne, которая не имеет никакой истории или редактирования командной строки и никакого управления заданиями.
Приблизительно в течение прошлых 15 лет или так, большинству Unixes установили оболочку POSIX, или по крайней мере ksh или удар (которые очень почти подобны POSIX), но все еще имейте более ограниченную оболочку в/bin/sh
Причина этого состоит в том так, чтобы более старые сценарии оболочки, которые ожидают более старое sh
команда будет все еще работать.
Начиная с символов как {
, }
и !
имейте особое значение для избиения, возможно, что более старый сценарий оболочки с помощью тех символов (не выходя из них) мог перестать работать.
(Оболочка Bourne взяла бы !!{1,2}
буквально, тогда как удар интерпретировал бы это как повторение предыдущей команды (!!
) сопровождаемый расширением фигурной скобки).
На Linux, хотя, sh
команда является почти всегда просто ссылкой на bash
, со всем одинаковым функции.
На самом деле, даже при том, что/bin/sh может быть ссылкой на/bin/bash, если запущено как sh это ведет себя по-другому. Из страницы справочника удара:
Если удар вызывается с именем sh, это пытается подражать поведению запуска исторических версий sh максимально тесно при приспосабливании стандарту POSIX также.
Так как sh
, это пытается эмулировать историческое sh поведение. Как bash
, это пытается быть максимально полезным как интерактивная оболочка входа в систему.
Во многих системах и в Солярисе, в частности, динамично связан удар, в то время как sh статически связан. Это может изложить угрозу нарушения безопасности, поэтому пользователь root должен только использовать/bin/sh в качестве оболочки (если когда-нибудь необходимо регистрироваться как корень).