В чем разница между #! / Bin / sh и #! / Bin / bash?

Вы можете настроить «Double Click Timeout» в All Settings -> Mouse and Touchpad -> 'Double-Click Timeout' и настроить ползунок на ваши личные предпочтения.

При этом, если вы получаете несогласованные результаты, источником проблемы является, скорее всего, прерывистый отказ оборудования или ошибка пользователя. Я предполагаю, что вы можете щелкнуть или дважды щелкнуть, просто попробуйте другую кнопку мыши, если это изменение настроек не поможет.

1
задан 10 January 2018 в 14:30

2 ответа

В Linux и других Unix-подобных системах у вас есть выбор из нескольких оболочек.

Оболочка отвечает не только за рисование вашего маленького приглашения, но и за перевод ваших команд, особенно если вы ввели сложную логику например, трубы, условные обозначения и т. д.

bash - наиболее распространенная оболочка, используемая в качестве оболочки по умолчанию для пользователей систем Linux. Это духовный потомок других снарядов, используемых во всей истории Unix. Его имя, bash - это аббревиатура от Bourne-Again Shell, дань уважения оболочке Bourne, которую она была предназначена для замены, хотя она также включает в себя функции от C Shell и Korn Shell.

Это запущено, эти дней, из /bin/bash - любая система с bash будет доступна здесь.

Однако не только пользователи, использующие оболочки. Скрипты ( bash ) нуждаются в оболочках для их интерпретации. Когда вы запускаете сценарий оболочки, вашей системе необходимо запустить процесс оболочки для выполнения вашего скрипта.

Проблема в том, что разные оболочки имеют крошечные небольшие несоответствия между ними, а когда дело доходит до запуска скриптов, эти может быть реальной проблемой. У bash есть довольно много особенностей скриптинга, которые уникальны только для bash, а не для других оболочек. Это нормально, если вы всегда будете использовать bash для запуска этих скриптов. Другие оболочки могут пытаться либо эмулировать bash, либо придерживаться стандарта POSIX, который bash поддерживает довольно хорошо (хотя добавляет свои собственные расширения).

В верхней части скрипта оболочки можно указать оболочку его следует запускать с помощью shebang. Сценарий может указывать #!/bin/bash в первой строке, что означает, что скрипт должен всегда запускаться с bash, а не с другой оболочкой.

/ bin / sh - это исполняемый файл, представляющий bash . Фактически, он обычно реализуется как символическая ссылка, указывающая на исполняемый файл, в зависимости от того, какая оболочка является оболочкой системы. Системная оболочка представляет собой оболочку по умолчанию, которую должны использовать системные сценарии. В дистрибутивах Linux в течение долгого времени это обычно было символической ссылкой на bash, так что это стало скорее соглашением всегда связывать / bin / sh с bash или bash-совместимой оболочкой. Однако в последние пару лет Debian (и Ubuntu) решили переключить системную оболочку с bash на bash - похожее разорение оболочки с давней традицией в Linux (ну, GNU) использования bash для / bin / sh. Dash рассматривается как более легкая и намного более быстрая оболочка, которая может быть полезной для скорости загрузки (и других вещей, требующих большого количества сценариев оболочки, например сценариев установки пакетов).

Dash довольно хорошо совместим с bash, основываясь на одном и том же стандарте POSIX. Однако он не реализует расширения, связанные с bash. Существуют сценарии, которые используют #!/bin/sh (системная оболочка) как их shebang, но которые требуют базовых расширений. В настоящее время это рассматривается как bash для Debian и Ubuntu, которые требуют, чтобы / bin / sh мог работать, когда указали на тире.

Несмотря на то, что системная оболочка Ubuntu указывает на тире , ваша оболочка входа в систему в качестве пользователя продолжает быть bash в это время. То есть, когда вы входите в эмулятор терминала в любом месте Linux, ваша оболочка входа будет bash. Скорость работы не такая уж большая проблема, когда оболочка используется в интерактивном режиме, и пользователи знакомы с bash (и могут иметь специфические настройки для bash в своем домашнем каталоге).

/ bin / sh

Если ваш скрипт требует функций, поддерживаемых только bash, используйте #!/bin/bash.

Но если это вообще возможно, было бы хорошо убедиться, что ваш скрипт POSIX -compatible и использовать #!/bin/sh, который должен всегда, достаточно надежно, указывать на предпочтительную совместимую с POSIX системную оболочку при любой установке.

60
ответ дан 25 May 2018 в 10:59

В дополнение к предыдущим ответам, даже если /bin/sh является символической ссылкой на /bin/bash, #!/bin/sh не является полностью эквивалентным #!/bin/bash.

Из bash (1) человек page:

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

Например, синтаксис bash:

 exec  > >(tee logfile.txt)

дает ошибку в оболочке, начинающейся с #!/bin/sh, даже с символической ссылкой sh-> bash.

15
ответ дан 25 May 2018 в 10:59

Другие вопросы по тегам:

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