Есть несколько программ, которые реализуют язык /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и нет никаких ожиданий, что эти сценарии будут работать в другом дистрибутиве).
==что должно быть=. Это и то, что расширения переменных должны быть в двойных кавычках.