В нашей школьной системе мы можем запускать файлы сценариев, не набирая bash
или csh
, или что там у вас, без указания типа сценария. Однако в Ubuntu мне нужно, например, набрать bash script.bash
. Это всегда необходимо в Ubuntu, или я могу изменить некоторые настройки?
Убедитесь, что вы запускаете скрипт с ./script
или полным путем или чем-то еще. Просто script
может не работать (он работает, если каталог находится в $PATH
, как /usr/bin
), поскольку в системах UNIX не является привычкой иметь текущий каталог в вашем пути (по соображениям безопасности, и это хорошо! )
Убедитесь, что скрипт исполняемый, например: chmod +x script
сделает его исполняемым.
Убедитесь, что у вас есть #!/bin/bash
в качестве первой строки в вашем скрипте. Также убедитесь, что он не редактируется с помощью какого-то редактора Windows, так как он часто использует «тип DOS» eol (конец строки), который отличается от UNIX (если контрольный список выше, но вы получили «плохо» интерпретатор: нет такого файла или каталога "или около того, даже если это / bin / bash, это часто является причиной, поскольку не для печати - так что вы обычно не видите его - \ r будет рассматриваться как часть путь к интерпретатору)
Другие уже упоминали: важно иметь /bin/bash
, если вы используете функции bash, также /bin/sh
была связана с /bin/bash
, но теперь - дни (насколько я заметил) он связан с dash
, который не обеспечивает совместимость с bash, только с POSIX sh
. Это очень важно, даже у довольно дорогих программ в нашей фирме есть такая проблема: скрипты содержат #!/bin/sh
в качестве первой строки, но это также зависит от функциональности bash.
Убедитесь, что в первой строке файла указано:
#!/bin/bash
Если шебанг равен #!/bin/sh
, вам не следует использовать какие-либо специфичные для bash функции, только функции POSIX. Даже если /bin/sh
является символической ссылкой на bash
, bash будет работать в режиме совместимости с POSIX при запуске от имени sh, отключая некоторые (но не все) функции bash.
Вы также должны убедиться, что скрипт исполняемый.
Альтернатива, настоятельно не рекомендуется способ добавления .
к PATH
.
PATH=".:$PATH"
или
PATH="$PATH:."
Проблема этого подхода заключается в том, что в первом случае любая системная команда может быть переопределена исполняемыми файлами из текущего каталога, а во втором случае неизвестные команды могут все еще быть отмененным.
Рассмотрим следующее:
#!/bin/bash
./my_malicious_script &>/dev/null
/bin/ls "$@"
Скорее всего, вы даже не заметите, пока не станет слишком поздно.