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

bash (от англ. Bourne again shell , каламбур «Born again» shell  — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.

Книги

  • Беспроводная сеть дома и в офисе Книга поможет начинающему администратору домашней или офисной сети в кратчайшие сроки развернуть, настроить или модернизировать беспроводную сеть. Отличный выбор для построения сети SOHO
  • Планшет и смартфон на базе Android для ваших родителей Книга рассчитана на людей среднего и старшего возраста. Она поможет освоить современный «карманный компьютер» на базе Android, в котором все новое и «не так, как в Windows». Доступным языком описывается, как включить и выключить смартфон и т.д.
  • Facebook. Полное руководство Эта книга — простое и эффективное учебное пособие по изучению, освоению и успешному использованию всех доступных инструментов популярной социальной сети Facebook
  • PHP и MySQL. Разработка Web-приложений. 4-е изд Даны начала программирования на PHP: установка и настройка Apache, PHP, MySQL и кроссплатформенной сборки XAMPP, выбор редактора PHP-кода, синтаксис языка и самые полезные функции PHP 5.4. Рассмотрено создание собственного движка сайта и ряда дополни
  • Руководство по командам и shell-программированию в Linux Рассмотрены команды Linux, основы работы в командной строке, а также настройка системы с помощью программ, обладающих только текстовым интерфейсом. Работа с системой выполняется только в режиме консоли, что требует определенной квалификации пользоват

ответа

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

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

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

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

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

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

Читайте также:  Установка Linux — пошаговая инструкция на примере Ubuntu

В верхней части скрипта оболочки можно указать оболочку его следует запускать с помощью 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 ответ дан thomasrutter 25 May 2018 в 10:59 поделиться

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

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

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

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

exec > >(tee )

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

15 ответ дан muru 25 May 2018 в 10:59 поделиться

Как установить оболочку Bash в Windows 10

Перед установкой Bash следует обновить Windows 10 до последней версии 1607. Bash в Windows 10 будет доступен только после установки обновления Anniversary Update. Еще одним условием является использование 64-разрядной системы в редакции Home или Pro. В общем, если у вас 64-разрядная версия Windows 10 1607 (с установленным последним обновлением Anniversary Update), то можно приступить к активации Bash.

Читайте также:  Как перенести сайт на домен: пошаговая инструкция

Для этого сначала включите режим разработчика. Зайдите в меню Пуск, выберите пункт Параметры, а затем Обновление и безопасность. Перейдите на вкладку «Для разработчиков» и включите опцию «Режим разработчика».

После система запросит, действительно ли вы хотите включить режим разработчика, нажмите «Да». Система начнет искать подходящий для вашего компьютера пакет разработчика и установит необходимые компоненты. Затем появится сообщение, что некоторые функции не будут работать до перезагрузки компьютера – перезагрузите систему, чтобы завершить установку.

Как установить оболочку Bash в Windows 10

После этого переходим непосредственно к установке Bash. Кликните правой кнопкой мыши на кнопку Пуск, откройте Панель управления и перейдите на вкладку «Программы и компоненты». Откроется окно Удаления и изменения программ — выберите «Включение или отключение компонентов Windows».

После нажатия на эту опцию откроется новое окно с выбором системных функций, которые мы можем добавить или удалить. В списке нужно найти пункт «Подсистема Windows для Linux (бета)».

Собственно эта опция содержит все элементы необходимые для установки и запуска консольного приложения Bash. Выберите её в списке и подтвердите установку нажатием на ОК. После появится новое окно «Компоненты Windows», в котором можно отслеживать процесс загрузки и установки необходимых файлов. Процесс активации займет буквально минуту, после чего система попросит перезагрузку – нажмите «Перезагрузить сейчас».

Что изучить еще по теме?

Инструменты командной строки могут быть отличным дополнением к основному набору инструментов. Первоначально терминал может напугать новичков, но как только они его освоят, его реальные достоинства и преимущества могут быть реализованы. Данная статья призвана заставить начинающего пользователя начать изучение терминала только поверхностно. В сети доступно множество полезных ресурсов, позволяющих детально изучить и узнать об оболочке. Вот некоторые из рекомендуемых ресурсов (на английском):

  • Командная строка Linux пятое интернет-издание William Shotts
  • Bash — Руководство для начинающих
  • The Bash Academy

Командная строка

Командная строка Bash работает под управлением библиотеки Readline. Readline позволяет использовать комбинации клавиш в стиле emacs и vi для взаимодействия с командной строкой, например, для перемещения назад и вперёд целыми словами, удаления слов и т.д. Кроме того, Readline отвечает за хранение истории выполненных команд, а также позволяет создавать макросы.

Автодополнение

Автодополнение (tab completion) — завершение вводимых команд по нажатию клавиши Tab (работает по умолчанию).

Одиночное нажатие

Вывести список возможных завершений для частично введённой команды можно несколькими повторными нажатиями клавиши Tab — иногда двумя или тремя. В статье Readline#Быстрое завершение описано, как уменьшить количество нажатий до одного.

Дополнительные программы и опции

По умолчанию Bash позволяет дополнять команды, имена файлов и переменные. Пакет bash-completion добавляет автодополнение для наиболее распространённых команд и их опций, которые можно включить, считав и исполнив файл /usr/share/bash-completion/bash_completion . С пакетом bash-completion обычные завершения (вроде $ ls file.* ) будут вести себя немного по-другому, вернуть старое поведение можно командой $ compopt -o bashdefault программа (подробнее см. [2] и [3]).

Читайте также:  Установка Linux Mint Debian Edition 4 (LMDE)

Настройки для команд

По умолчанию Bash помогает завершать только имена файлов, которые следуют за командой. Это можно перенастроить командой complete -c , чтобы дополнялись и определённые команды:

С флагами -cf завершаться будут и команды, и имена файлов после них:

Другие опции автодополнения можно найти в руководстве Bash.

История команд

Автодополнение истории

Клавиши стрелок «вверх» и «вниз» можно назначить для поиска команд в истории (см. Readline#История команд и Синтаксис init-файлов Readline):

Или же, чтобы это работало во всех программах Readline:

Сокращение истории

Переменная HISTCONTROL позволяет предотвратить логирование некоторых команд. Например, чтобы одинаковые команды не попадали в историю, присвойте переменной следующее значение:

Если же задать значение erasedups , то дополнительно из истории будут удалены уже существующие дубликаты команд. Подробнее см. руководство Bash.

Отключение истории

Чтобы временно отключить историю, выполните:

После этого вводимые команды не будут сохраняться в $HISTFILE .

Теперь можно выполнять «чувствительные» в плане безопасности действия, вроде вычисления хэш-суммы пароля ( printf secret | sha256sum ) или работы с GPG ( gpg -eaF ), не опасаясь, что секретный ключ будет сохранён на диск.

Включить историю обратно можно командой

Чтобы отключить всю историю Bash:

После необходимо удалить старый файл истории (имейте в виду — команды ниже удалят его безвозвратно):

run-help из Zsh

В Zsh есть возможность вызывать справочное руководство для команды перед курсором по комбинации клавиш Alt+h . В Bash то же самое можно сделать с помощью привязки комбинации клавиш в Readline:

Предполагается, что вы используете (стандартный) режим редактирования Emacs.

Условия. Множественный выбор

Если необходимо сравнивать какоую-то одну переменную с большим количеством параметров, то целесообразней использовать оператор case.

#!/bin/bashecho "Выберите редатор для запуска:"echo "1 Запуск программы nano"echo "2 Запуск программы vi"echo "3 Запуск программы emacs"echo "4 Выход"read doing #здесь мы читаем в переменную $doing со стандартного вводаcase $doing in1)/usr/bin/nano # если $doing содержит 1, то запустить nano;;2)/usr/bin/vi # если $doing содержит 2, то запустить vi;;3)/usr/bin/emacs # если $doing содержит 3, то запустить emacs;;4)exit 0;;*) #если введено с клавиатуры то, что в case не описывается, выполнять следующее:echo "Введено неправильное действие"esac #окончание оператора case.

Результат работы:

[email protected]:~$ ./ редатор для запуска:1 Запуск программы nano2 Запуск программы vi3 Запуск программы emacs4 Выход

После выбор цифры и нажатия Enter запуститься тот редактор, который вы выбрали(если конечно все пути указаны правильно, и у вас установлены эти редакторы 🙂 )Прведу список логических операторв, которые используются для конструкции if-then-else-fi:

-z # строка пуста-n # строка не пуста=, (==) # строки равны!= # строки неравны-eq # равно-ne # неравно-lt,(< ) # меньше-le,(<=) # меньше или равно-gt,(>) #больше-ge,(>=) #больше или равно! #отрицание логического выражения-a,(&&) #логическое "И"-o,(//) # логическое "ИЛИ"С основами языка и условиями мы разобрались, чтобы не перегружать статью, разобью её на несколько частей (допустим на 3). Во второй части разберем операторы цикла и выполнение математических операций.