Существует несколько программ, реализующих язык /bin/sh
. В Ubuntu /bin/sh
— это тире, которое предназначено для быстрой работы, использования небольшого объема памяти и не поддерживает намного больше, чем минимум, ожидаемый от /bin/sh
. В RHEL /bin/sh
— это bash, который медленнее и использует больше памяти, но имеет больше возможностей. Одной из таких функций является оператор ==
для условного синтаксиса [
. Dash поддерживает [
, базовую функцию sh, но не имеет оператора ==
, являющегося расширением bash (, а также ksh и zsh ).
Вы можете переключить свою систему на использование bash. В Ubuntu /bin/sh
является символической ссылкой на dash
. Вместо этого вы можете сделать это символической ссылкой на bash
. Текущие версии Debian и Ubuntu (и производные )делают этот вариант установки dash. Чтобы изменить его, запустите
sudo dpkg-reconfigure dash
и ответьте «да», чтобы оставить тире как /bin/sh
, или «нет», чтобы переключиться на bash.
Вы можете оставить bash как /bin/sh
, но это сделает вашу систему немного медленнее. Возможно даже, что некоторые системные скрипты несовместимы с bash, хотя это маловероятно, поскольку bash в основном представляет собой надмножество dash.
Для дистрибутивов, в которых нет интерфейса для выбора между реализациями /bin/sh
, вот как переключиться на bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Держите терминал открытым и убедитесь, что вы все еще можете запускать sh
скрипты после этого. Если вы ошибетесь с этой командой, ваша система станет непригодной для использования. (Между прочим, причина, по которой я использовал несколько команд выше, а не простое -, выглядящее как sudo ln -sf bash /bin/sh
, заключается в том, что ln -sf
не является атомарным. В маловероятном случае, если ваш компьютер выйдет из строя во время этой операции, вам потребуется загрузиться с загрузочного носителя, чтобы восстановить его. Напротив, mv
является атомарным.)
Для восстановления тире как/bin/sh
:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Обратите внимание, что если в вашем дистрибутиве по умолчанию установлено значение /bin/bash
,переключение на тире может привести к сбою скриптов, потому что bash имеет гораздо больше возможностей, чем тире. Скрипты Bash должны начинаться с #!/bin/bash
, а сценарии, начинающиеся с #!/bin/sh
, не должны использовать специфические функции bash -, но дистрибутивы, которые поставляются с bash as /bin/sh
, могут использовать специфические функции bash -в скриптах #!/bin/sh
, которые специфичны для этого дистрибутива (, это нормально, если нет ожидания, что пользователи смогут переключиться на dash как /bin/sh
и нет ожидания, что эти скрипты будут работать в другом дистрибутиве ).
Сборка пакета запускается autoreconf
за вас, что гарантирует, что сборка использует установленный вами autoconf
. Чтобы использовать это, вместо того, чтобы выяснять команды сборки из журналов, запустите
cd ldap_pam-186
sudo apt build-dep libpam-ldap
dpkg-buildpackage -us -uc
Это создаст .deb
файлов в родительском каталоге.