Bash ( bash) - одна из многих доступных (но наиболее часто используемых) оболочек Unix. Bash расшифровывается как « B ourne A gain SH ell» и является заменой / улучшением оригинальной оболочки Bourne ( sh).
Сценарии оболочки - это сценарии в любой оболочке, тогда как сценарии Bash - сценарии специально для Bash. Однако на практике «сценарий оболочки» и «сценарий bash» часто используются взаимозаменяемо, если речь не идет о Bash.
РЕДАКТИРОВАТЬ: На самом деле, оболочка сценариев по умолчанию в Ubuntu - это dash, а интерактивная оболочка по умолчанию (что вы получаете, если вы открываете терминал) - Bash. Тем не менее, эти два термина по-прежнему в основном взаимозаменяемы.
Что определяет dash как оболочку сценариев по умолчанию?
17
1
@wjandrea Тот факт, что /bin/shсимволическая ссылка /bin/dashделает системную оболочку по умолчанию , но не является оболочкой сценариев по умолчанию , т. е. нет письменного правила, которое вам абсолютно необходимо использовать /bin/sh. Когда вы используете /bin/shего, это в основном из соображений переносимости, когда вы ожидаете, что ваш скрипт будет использоваться на нескольких Unix-подобных платформах ОС, большинство из которых имеют /bin/shPOSIX-совместимую оболочку семейства Bourne.
Сергей Колодяжный,
29
Введение
Сценарии оболочки и Bashсценарии - это не одно и то же, поскольку существуют другие оболочки, shкоторые можно использовать для выполнения сценария; сценарий, предназначенный для выполнения, Bashдолжен быть помечен как Bashсценарий. Эти термины часто используются взаимозаменяемо, поскольку Bashих расширенные функциональные возможности по сравнению с shнаиболее часто используются для выполнения пользовательских сценариев во многих дистрибутивах. Тем не менее, существуют и другие оболочки , такие как Korn (ksh), C shell (csh)и Z shell (zsh), но мы не будем вдаваться в них здесь , как обсуждение shи bashимеет самое непосредственное отношение к Ubuntu. Большая статья IBM здесь идет более подробно об эволюции оболочек в Linux и хорошо описывает архитектуру оболочки и как снаряды отличаются.
Сценарии оболочки
Shбыла оригинальная оболочка Unix, разработанная Стивеном Борном; однако системы на основе Debian и Ubuntu считают dashих shоболочкой ( shна самом деле это символическая ссылка dash). В Debian и Ubuntu из-за скорости shон чаще используется для критических системных процедур и для выполнения ключевых сценариев при запуске; для более подробной информации смотрите вики Ubuntu . Bashрасшифровывается как Bourne Again SHell и был разработан позже Брайаном Фоксом и значительно расширил оригинал sh. Разработка Fox и других Bashбыла важной частью проекта GNU. Смотрите это великое обсуждение истории Bashдля получения дополнительной информации.
Важно отметить, что оба shи Bash, как используется в Ubuntu и других дистрибутивах, являются POSIXсовместимыми, что означает, что они подписаны на ряд стандартов о том, как команды выполняются в командной консоли. Это делается для того, чтобы результаты сценариев, используемых в ОС, можно было надежно прогнозировать и чтобы поведение оболочки можно было поддерживать в этих POSIXпараметрах, что особенно важно для разработчиков. Для получения дополнительной информации о стандартах см. Официальную документацию .
Часто сценарии оболочки имеют суффикс .sh, даже если они предназначены для выполнения в виде bashсценариев и располагаются #!/bin/bashв верхней части сценария. На самом деле не имеет значения, называется ли скрипт script.sh или my.script , имеет значение, является ли вызов интерпретатором /bin/shили /bin/bash. Сценарии командной оболочки также могут быть вызваны из командной строки либо с shили bash.
Однако важно отметить, что результаты могут отличаться в зависимости от того, какой интерпретатор вызывается, поскольку не все bashкоманды будут работать sh, тогда как большинство shкоманд будут работать в bash. В целом, большинство пользователей захотят использовать /bin/bashдля своих сценариев, чтобы они могли воспользоваться расширенным набором функций; системные скрипты могут быть выполнены с помощью, /bin/shесли это требуется.
Ресурсы для сценариев Bash Shell
Иногда трудно найти полезные ресурсы в Интернете, которые следуют хорошей практике и дают советы, которые позволят вам создавать полезные сценарии. После man bash, некоторые из наиболее важных ресурсов - это вики Грега , хакеры Bash и недавняя книга Стива Паркера о скриптах в Shell, которая в основном посвящена Bashи опубликована О'Рейли. Хорошее введение также предпринято Руководством новичка Bash .
Этот ответ на самом деле превосходит мой (принятый ответ), мой только что пришел за неделю до этого.
Хилтон Шамуэй
4
Есть несколько оболочек , доступных для Ubuntu, как bash, zsh, ksh, tcshи csh.
Поэтому, когда кто-то говорит « Шелл» , он говорит об одном из них. Однако эти снаряды немного отличаются друг от друга. Таким образом, когда кто-то говорит о bashсценариях, он использует оболочку, но когда кто-то говорит о сценариях оболочки, он сам по себе не использует bash. Но, как bashэто обычно используется в сценариях для Ubuntu, он обычно так и есть. Более того, разные оболочки одинаковы во многих аспектах, поэтому обычно это не имеет значения.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4Mar2911:53/bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768Mar2911:53/bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024Apr308:58/bin/bash*
Это показывает, что 'sh' является символической ссылкой на 'dash', и что / bin / bash, которая является интерактивной оболочкой по умолчанию в Ubuntu, является исполняемым файлом, который почти в 9 раз больше, чем / bin / sh.
Действительно, «man sh» (1590 строк) против «man bash» (5459 строк) показывает, что bash является большой надмножеством традиционного «sh».
Сценарий оболочки будет определен как ориентированный на переносимость сценарий, который может запускаться системной оболочкой POSIX-совместимых ОС. Синтаксис будет идентичным или похожим на синтаксис языка сценариев оболочки, определенный стандартом POSIX. Это стандарт для большинства POSIX-совместимых ОС, таких как Linux / Unix / * BSD и т. Д. POSIX является наиболее распространенной основой для совместимости между операционными системами.
Различные ОС из вышеупомянутого реализуют различные оболочки для неинтерактивного использования (то есть для выполнения системных сценариев или сценариев, использующих #! /bin/shshebang), которые помимо реализации команд и синтаксиса POSIX имеют свои собственные расширения или могут быть исключены из некоторых менее полезных функций по соображениям производительности, но основа POSIX обеспечивает очень высокий уровень переносимости сценариев, разработанных для различных POSIX-совместимых Oss.
Большинство вышеупомянутых ОС имеют отдельную интерактивную оболочку, которая обычно представляет собой полнофункциональную bash . Bash в значительной степени совместим с POSIX, но также имеет большой пул дополнительных команд и поддерживает другой синтаксис. Запуск Bash с параметром командной строки --posix или выполнение set -o posix во время работы Bash приведут к тому, что Bash будет более точно соответствовать стандарту POSIX, изменив поведение, чтобы оно соответствовало заданному POSIX в тех областях, где Bash используется по умолчанию. отличается, см .: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html.
Спецификатор Shebang и унифицированные пути для исполняемых файлов оболочки в Unix-подобных ОС
Благодаря единым правилам размещения исполняемых файлов для оболочек (они обычно находятся в каталоге / bin /), мы можем иметь единые правила для создания сценариев оболочки, более конкретно, нам ясно, какой путь поместить в выражение shebang, чтобы указать на правильный исполняемый файл оболочки для запуска скрипта. Файловые системы Unix / Linux / * BSD по своей природе не поддерживают расширения, поэтому расширения файлов служат только в качестве дополнительной подсказки или для целей индексации.
Debian / Ubuntu интерактивный терминал по умолчанию, как и во многих других Unix-подобных операционных систем, Баш, для которых путь также равномерная: /bin/bash.
Если команда или параметр не определены в POSIX, не ставьте их в
#! /bin/shсценарий.
Преобразуйте ваш скрипт или проверьте на ошибки
Для преобразования вашего скрипта из bash в форму POSIX вы можете автоматически проверить наличие ошибок в вашем скрипте оболочки или посмотреть, какие изменения в вашем скрипте bash вы должны сделать, чтобы сделать его POSIX-совместимым:
Ответы:
Bash (
bash
) - одна из многих доступных (но наиболее часто используемых) оболочек Unix. Bash расшифровывается как « B ourne A gain SH ell» и является заменой / улучшением оригинальной оболочки Bourne (sh
).Сценарии оболочки - это сценарии в любой оболочке, тогда как сценарии Bash - сценарии специально для Bash. Однако на практике «сценарий оболочки» и «сценарий bash» часто используются взаимозаменяемо, если речь не идет о Bash.
РЕДАКТИРОВАТЬ: На самом деле, оболочка сценариев по умолчанию в Ubuntu - это dash, а интерактивная оболочка по умолчанию (что вы получаете, если вы открываете терминал) - Bash. Тем не менее, эти два термина по-прежнему в основном взаимозаменяемы.
источник
/bin/sh
символическая ссылка/bin/dash
делает системную оболочку по умолчанию , но не является оболочкой сценариев по умолчанию , т. е. нет письменного правила, которое вам абсолютно необходимо использовать/bin/sh
. Когда вы используете/bin/sh
его, это в основном из соображений переносимости, когда вы ожидаете, что ваш скрипт будет использоваться на нескольких Unix-подобных платформах ОС, большинство из которых имеют/bin/sh
POSIX-совместимую оболочку семейства Bourne.Введение
Сценарии оболочки и
Bash
сценарии - это не одно и то же, поскольку существуют другие оболочки,sh
которые можно использовать для выполнения сценария; сценарий, предназначенный для выполнения,Bash
должен быть помечен какBash
сценарий. Эти термины часто используются взаимозаменяемо, посколькуBash
их расширенные функциональные возможности по сравнению сsh
наиболее часто используются для выполнения пользовательских сценариев во многих дистрибутивах. Тем не менее, существуют и другие оболочки , такие какKorn (ksh)
,C shell (csh)
иZ shell (zsh)
, но мы не будем вдаваться в них здесь , как обсуждениеsh
иbash
имеет самое непосредственное отношение к Ubuntu. Большая статья IBM здесь идет более подробно об эволюции оболочек в Linux и хорошо описывает архитектуру оболочки и как снаряды отличаются.Сценарии оболочки
Sh
была оригинальная оболочка Unix, разработанная Стивеном Борном; однако системы на основе Debian и Ubuntu считаютdash
ихsh
оболочкой (sh
на самом деле это символическая ссылкаdash
). В Debian и Ubuntu из-за скоростиsh
он чаще используется для критических системных процедур и для выполнения ключевых сценариев при запуске; для более подробной информации смотрите вики Ubuntu .Bash
расшифровывается как Bourne Again SHell и был разработан позже Брайаном Фоксом и значительно расширил оригиналsh
. Разработка Fox и другихBash
была важной частью проекта GNU. Смотрите это великое обсуждение историиBash
для получения дополнительной информации.Важно отметить, что оба
sh
иBash
, как используется в Ubuntu и других дистрибутивах, являютсяPOSIX
совместимыми, что означает, что они подписаны на ряд стандартов о том, как команды выполняются в командной консоли. Это делается для того, чтобы результаты сценариев, используемых в ОС, можно было надежно прогнозировать и чтобы поведение оболочки можно было поддерживать в этихPOSIX
параметрах, что особенно важно для разработчиков. Для получения дополнительной информации о стандартах см. Официальную документацию .Часто сценарии оболочки имеют суффикс
.sh
, даже если они предназначены для выполнения в видеbash
сценариев и располагаются#!/bin/bash
в верхней части сценария. На самом деле не имеет значения, называется ли скрипт script.sh или my.script , имеет значение, является ли вызов интерпретатором/bin/sh
или/bin/bash
. Сценарии командной оболочки также могут быть вызваны из командной строки либо сsh
илиbash
.Однако важно отметить, что результаты могут отличаться в зависимости от того, какой интерпретатор вызывается, поскольку не все
bash
команды будут работатьsh
, тогда как большинствоsh
команд будут работать вbash
. В целом, большинство пользователей захотят использовать/bin/bash
для своих сценариев, чтобы они могли воспользоваться расширенным набором функций; системные скрипты могут быть выполнены с помощью,/bin/sh
если это требуется.Ресурсы для сценариев Bash Shell
Иногда трудно найти полезные ресурсы в Интернете, которые следуют хорошей практике и дают советы, которые позволят вам создавать полезные сценарии. После
man bash
, некоторые из наиболее важных ресурсов - это вики Грега , хакеры Bash и недавняя книга Стива Паркера о скриптах в Shell, которая в основном посвященаBash
и опубликована О'Рейли. Хорошее введение также предпринято Руководством новичка Bash .источник
Есть несколько оболочек , доступных для Ubuntu, как
bash
,zsh
,ksh
,tcsh
иcsh
.Поэтому, когда кто-то говорит « Шелл» , он говорит об одном из них. Однако эти снаряды немного отличаются друг от друга. Таким образом, когда кто-то говорит о
bash
сценариях, он использует оболочку, но когда кто-то говорит о сценариях оболочки, он сам по себе не используетbash
. Но, какbash
это обычно используется в сценариях для Ubuntu, он обычно так и есть. Более того, разные оболочки одинаковы во многих аспектах, поэтому обычно это не имеет значения.источник
Это показывает, что 'sh' является символической ссылкой на 'dash', и что / bin / bash, которая является интерактивной оболочкой по умолчанию в Ubuntu, является исполняемым файлом, который почти в 9 раз больше, чем / bin / sh.
Действительно, «man sh» (1590 строк) против «man bash» (5459 строк) показывает, что bash является большой надмножеством традиционного «sh».
Узнайте больше здесь:
источник
Сценарий оболочки будет определен как ориентированный на переносимость сценарий, который может запускаться системной оболочкой POSIX-совместимых ОС. Синтаксис будет идентичным или похожим на синтаксис языка сценариев оболочки, определенный стандартом POSIX. Это стандарт для большинства POSIX-совместимых ОС, таких как Linux / Unix / * BSD и т. Д. POSIX является наиболее распространенной основой для совместимости между операционными системами.
Различные ОС из вышеупомянутого реализуют различные оболочки для неинтерактивного использования (то есть для выполнения системных сценариев или сценариев, использующих
#! /bin/sh
shebang), которые помимо реализации команд и синтаксиса POSIX имеют свои собственные расширения или могут быть исключены из некоторых менее полезных функций по соображениям производительности, но основа POSIX обеспечивает очень высокий уровень переносимости сценариев, разработанных для различных POSIX-совместимых Oss.Большинство вышеупомянутых ОС имеют отдельную интерактивную оболочку, которая обычно представляет собой полнофункциональную bash . Bash в значительной степени совместим с POSIX, но также имеет большой пул дополнительных команд и поддерживает другой синтаксис. Запуск Bash с параметром командной строки --posix или выполнение set -o posix во время работы Bash приведут к тому, что Bash будет более точно соответствовать стандарту POSIX, изменив поведение, чтобы оно соответствовало заданному POSIX в тех областях, где Bash используется по умолчанию. отличается, см .: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html.
Спецификатор Shebang и унифицированные пути для исполняемых файлов оболочки в Unix-подобных ОС
Благодаря единым правилам размещения исполняемых файлов для оболочек (они обычно находятся в каталоге / bin /), мы можем иметь единые правила для создания сценариев оболочки, более конкретно, нам ясно, какой путь поместить в выражение shebang, чтобы указать на правильный исполняемый файл оболочки для запуска скрипта. Файловые системы Unix / Linux / * BSD по своей природе не поддерживают расширения, поэтому расширения файлов служат только в качестве дополнительной подсказки или для целей индексации.
В частности, в Debian / Ubuntu
bin/sh
- это символическая ссылка, указывающая наbin/dash
исполняемый файл оболочки dash . Это делает dash системной оболочкой, которая, по оценкам, в 4 раза быстрее и имеет размер ~ 1/10, чем более функциональная bash. источник: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bashDebian / Ubuntu интерактивный терминал по умолчанию, как и во многих других Unix-подобных операционных систем, Баш, для которых путь также равномерная:
/bin/bash
.Стандарт POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
Общее правило будет:
Преобразуйте ваш скрипт или проверьте на ошибки
Для преобразования вашего скрипта из bash в форму POSIX вы можете автоматически проверить наличие ошибок в вашем скрипте оболочки или посмотреть, какие изменения в вашем скрипте bash вы должны сделать, чтобы сделать его POSIX-совместимым:
https://www.shellcheck.net/
http://mywiki.wooledge.org/Bashism
источник