У меня есть новая установка Ubuntu 18.04. Я запускаю довольно много скриптов установки в .sh
файлы. Я заметил это, если я просто работаю ./my_script.sh
, они сообщат [[: not found
если я явно не указываю bash ./my_script.sh
. Поиск Google предполагает, что значение по умолчанию эквивалентно sh ./my_script.sh
и именно поэтому это произошло.
Теперь у меня есть набор сценариев, записанных кем-то еще предполагающим, что я использую bash
и названный довольно многими .sh
файлы. Я могу войти в сценарии и явно добавить bash
перед ними; но там был бы способ связаться .sh
файлы с ударом по умолчанию?
Примечание: Я уже использую удар - я вижу результат echo $0
bash
.
Shawn
Как самая первая строка Ваших сценариев добавляют в строке хижины для интерпретатора. Тем путем Вы не должны указывать оболочку, прежде чем Вы запустите скрипт.
Примеры:
Для bash
включить
#!/bin/bash
Для sh
включить
#!/bin/sh
и т.д.
С Linux расширения файла проигнорированы для сообщения ядра, какой файл это. Вместо этого лучше добавлять его как самую первую строку в сценарии для сообщения его, каково это. Поскольку тест здесь является тем же файлом, но с другим интерпретатором как первая строка.
~$ file a.txt
a.txt: ASCII text
~$ cat a.txt
11
22
33
44
55
11
Теперь я добавлю строку хижины, как обрисовано в общих чертах выше как самую первую строку в том файле и запущу тест снова:
~$ file a.txt
a.txt: Bourne-Again shell script, ASCII text executable
~$ cat a.txt
#!/bin/bash
11
22
33
44
55
11
Надеюсь, это поможет!
Как объяснено в других ответах, файлы, которые Вы загрузили, не связаны с конкретным интерпретатором оболочки их .sh
расширение, но их #!/bin/sh
"хижина".
С первых лет Ubuntu использовала Almquist dash
оболочка для обеспечения /bin/sh
как обсуждено здесь:
Другие системы (особенно системы Linux прежней версии) могут принять это /bin/sh
обеспечивают bash
- который является, почему Вы видите ошибки, которые Вы. Хотя я не рекомендовал бы это, литеральный ответ на Ваш вопрос "там будет способом связаться, .sh файлы с ударом по умолчанию" подан вышеупомянутая связь, которую разорвала Моя производственная система, и я просто хочу вернуть его! т.е.
sudo dpkg-reconfigure dash
но отметьте связанное предупреждение:
Остерегайтесь этого, это - более агрессивное изменение, отменит преимущества скорости начальной загрузки, и существует даже ничтожный шанс, что существует несколько сценариев, которые теперь зависят от некоторой функции тире, которого не обеспечивает удар!