Есть несколько программ, которые реализуют язык /bin/sh
. В Ubuntu /bin/sh
это dash, который предназначен для быстрого использования небольшого объема памяти и не поддерживает намного больше, чем ожидаемый минимум /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
в вашем дистрибутиве по умолчанию используется sh , переключение на dash может привести к сбою сценариев, поскольку bash имеет гораздо больше возможностей, чем dash. Сценарии Bash должны начинаться с #!/bin/bash
, и сценарии, начинающиеся с, #!/bin/sh
не должны использовать специфичные для bash функции, но дистрибутивы, поставляемые с bash, /bin/sh
могут использовать специфичные для bash функции в #!/bin/sh
сценариях, специфичных для этого дистрибутива (это нормально, если пользователи не ожидают может переключиться на dash как /bin/sh
и нет никаких ожиданий, что эти сценарии будут работать в другом дистрибутиве).
==
что должно быть=
. Это и то, что расширения переменных должны быть в двойных кавычках.