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

./my_script: 61: [[: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 61: ==: not found
./my_script: 67: [[: not found
./my_script: 73: [[: not found

Там явно что-то не совсем верно :)

Сценарий начинается с:

#!/bin/sh

редактировать

Он работает нормально, если я начну так:

bash ./my_script

Редактировать 2

Извините, это был глупый вопрос без каких-либо дополнительных объяснений :) Этот сценарий работает нормально, без изменений, на некоторых машинах RHEL - что мне нужно изменить в окне Ubuntu, чтобы заставить скрипт работать без изменения скрипта?

2 ответа2

4

Разница кажется довольно очевидной:

  • Когда вы bash, вы выполняете bash.
  • Когда вы ./myscript , он выполняет sh (#! линия).

Если скрипт использует специфичные для bash функции, он должен начинаться с #!/bin/bash (или, может быть, #!/usr/bin/env bash).

1

Вам нужно сделать /bin/sh символической ссылкой на /bin/bash:

$ cd /bin
$ sudo ln -sf bash sh

Этот ключ может иметь неизвестные побочные эффекты, потому что изменение этой символической ссылки приводит к тому, что /bin/bash используется для выполнения системных скриптов вместо /bin/dash . , Если вы хотите, вы всегда можете вернуться к исходному расположению ссылок.

Ubuntu немного изменила оболочку по умолчанию:

-rwxr-xr-x 1 root root 801808 2010-08-10 15:58 bash
-rwxr-xr-x 1 корневой корень 87984 2010-06-24 16:01 тире
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 rbash -> bash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh -> dash
lrwxrwxrwx 1 root root 4 2010-10-16 21:58 sh.distrib -> bash
lrwxrwxrwx 1 root root 7 2010-10-16 21:58 static-sh -> busybox

В любом случае это просто символическая ссылка. Если что-то сломается, вам нужно заменить его обратно.

Некоторые пользователи делают это с 2007 года, и у них мало побочных эффектов. Я не могу назвать это безумием.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .