Скрипты Bash не будут работать без ввода & ldquo; bash & rdquo; перед ней

В нашей школьной системе мы можем запускать файлы сценариев, не набирая bash или csh, или что там у вас, без указания типа сценария. Однако в Ubuntu мне нужно, например, набрать bash script.bash. Это всегда необходимо в Ubuntu, или я могу изменить некоторые настройки?

11
задан 10 February 2011 в 19:32

3 ответа

  1. Убедитесь, что вы запускаете скрипт с ./script или полным путем или чем-то еще. Просто script может не работать (он работает, если каталог находится в $PATH, как /usr/bin), поскольку в системах UNIX не является привычкой иметь текущий каталог в вашем пути (по соображениям безопасности, и это хорошо! )

  2. Убедитесь, что скрипт исполняемый, например: chmod +x script сделает его исполняемым.

  3. Убедитесь, что у вас есть #!/bin/bash в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-то редактора Windows, так как он часто использует «тип DOS» eol (конец строки), который отличается от UNIX (если контрольный список выше, но вы получили «плохо» интерпретатор: нет такого файла или каталога "или около того, даже если это / bin / bash, это часто является причиной, поскольку не для печати - так что вы обычно не видите его - \ r будет рассматриваться как часть путь к интерпретатору)

Другие уже упоминали: важно иметь /bin/bash, если вы используете функции bash, также /bin/sh была связана с /bin/bash, но теперь - дни (насколько я заметил) он связан с dash, который не обеспечивает совместимость с bash, только с POSIX sh. Это очень важно, даже у довольно дорогих программ в нашей фирме есть такая проблема: скрипты содержат #!/bin/sh в качестве первой строки, но это также зависит от функциональности bash.

0
ответ дан 10 February 2011 в 19:32

Убедитесь, что в первой строке файла указано:

#!/bin/bash

Если шебанг равен #!/bin/sh, вам не следует использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh является символической ссылкой на bash, bash будет работать в режиме совместимости с POSIX при запуске от имени sh, отключая некоторые (но не все) функции bash.

Вы также должны убедиться, что скрипт исполняемый.

0
ответ дан 10 February 2011 в 19:32

Альтернатива, настоятельно не рекомендуется способ добавления . к PATH.

PATH=".:$PATH"

или

PATH="$PATH:."

Проблема этого подхода заключается в том, что в первом случае любая системная команда может быть переопределена исполняемыми файлами из текущего каталога, а во втором случае неизвестные команды могут все еще быть отмененным.

Рассмотрим следующее:

Файл: ls

#!/bin/bash

./my_malicious_script &>/dev/null
/bin/ls "$@"

Скорее всего, вы даже не заметите, пока не станет слишком поздно.

0
ответ дан 10 February 2011 в 19:32

Другие вопросы по тегам:

Похожие вопросы: