Сценарии bash - это то же самое, что сценарии оболочки?

Я очень новичок в Ubuntu. Я слышал, как люди говорят «сценарии оболочки», «сценарии bash».

Интересно, они одинаковые? Или они разные?

59
задан 13 October 2016 в 15:26

5 ответов

Bash (bash) - одна из многих доступных (но наиболее часто используемых) оболочек Unix. Bash означает « B ourne A усиление SH ell» »и является заменой / улучшением оригинальной оболочки Bourne (sh).

Сценарии оболочки - это сценарии в любой оболочки, в то время как сценарии Bash - это сценарии специально для Bash. Однако на практике «сценарий оболочки» и «сценарий bash» часто используются взаимозаменяемо, если речь не идет о Bash

.

РЕДАКТИРОВАТЬ: На самом деле, оболочкой сценариев по умолчанию в Ubuntu является dash, а интерактивной оболочкой по умолчанию (что вы получаете, если вы открываете терминал) является Bash. Тем не менее, эти два термина по-прежнему в основном взаимозаменяемы.

0
ответ дан 13 October 2016 в 15:26

Для Ubuntu доступно несколько оболочек, таких как bash, zsh, ksh, tcsh и csh.

Так что каждый раз, когда кто-то говорит shell , он говорит об одном из них. Однако эти снаряды немного отличаются друг от друга. Таким образом, когда кто-то говорит о bash сценариях, он использует оболочку, но когда кто-то говорит о сценариях оболочки, он сам по себе не использует bash. Но так как bash обычно используется в сценариях для Ubuntu, он обычно так и есть. Более того, разные оболочки одинаковы во многих аспектах, поэтому обычно это не имеет значения.

0
ответ дан 13 October 2016 в 15:26
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

Это показывает, что 'sh' является символической ссылкой на 'dash', и что / bin / bash, которая является интерактивной оболочкой по умолчанию в Ubuntu, является исполняемым файлом, который почти в 9 раз больше, чем / bin / sh .

Действительно, «man sh» (1590 строк) против «man bash» (5459 строк) показывает, что bash является большой надмножеством традиционного «sh».

Подробнее читайте здесь:

0
ответ дан 13 October 2016 в 15:26

Введение

Сценарии оболочки и Bash не одно и то же, поскольку существуют другие оболочки, такие как sh, которые можно использовать для выполнения сценария; сценарий, предназначенный для выполнения Bash, должен быть помечен как Bash сценарий. Термины часто используются взаимозаменяемо, потому что Bash с его расширенной функциональностью по сравнению с sh является наиболее часто используемым для выполнения пользовательских сценариев во многих дистрибутивах. Однако есть и другие оболочки, такие как Korn (ksh), C shell (csh) и Z shell (zsh), но мы не будем вдаваться в них здесь, поскольку обсуждение sh и bash наиболее актуально для Ubuntu. Большая статья IBM здесь более подробно описывает эволюцию оболочек в Linux и хорошо описывает архитектуру оболочки и то, как оболочки различаются.

Shell Scripting

Sh была оригинальной оболочкой Unix, разработанной Стивеном Борном; однако системы на основе Debian и Ubuntu считают dash своей оболочкой sh (на самом деле sh является символической ссылкой на dash). В Debian и Ubuntu из-за скорости sh он чаще используется для критических системных процедур и для выполнения ключевых сценариев при запуске; подробнее см. вики Ubuntu . Bash расшифровывается как Bourne Again SHell и был разработан позже Брайаном Фоксом и значительно расширил оригинал sh. Фокс и другие разработчики 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 hackers и недавняя книга Стива Паркера о сценариях Shell, которая в основном посвящена Bash и опубликована O ' Рейли. Хорошее введение также предпринято в Руководстве для начинающих . [+1157]

0
ответ дан 13 October 2016 в 15:26

Сценарий оболочки будет определяться как ориентированный на переносимость сценарий, который может запускаться системной оболочкой из 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-bash

Интерактивный терминал Debian / Ubuntu по умолчанию, как и во многих других Unix-подобных операционных системах, bash, для которого путь также одинаков: /bin/bash.

Стандарт POSIX.1-2017: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html

Общее правило будет:

< blockquote>

Если команда или параметр не определены в POSIX, не ставьте их в сценарий #! /bin/sh.

Преобразование сценария или проверка на ошибки

Для преобразования сценария из bash в форму POSIX вы можете автоматически проверять наличие ошибок в сценарии оболочки или просматривать изменения в сценарии bash. вам нужно сделать так, чтобы он был совместим с POSIX:

https://www.shellcheck.net/

http://mywiki.wooledge.org/ Bashism

0
ответ дан 13 October 2016 в 15:26

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

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