В нашей школьной системе, мы можем запускать файлы сценариев без ввода bash
или csh
или что там у вас , без указания , какой тип сценария это. В Ubuntu, однако, я должен напечатать, bash script.bash
например. Это всегда необходимо в Ubuntu, или я могу изменить некоторые настройки?
11
.sh
неиспользование скриптов bash. Как правило, расширения файлов не используются для исполняемых скриптов в мире UNIX.Ответы:
Убедитесь, что вы запускаете скрипт с
./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, только POSIXsh
. Это очень важно, даже у довольно дорогого программного обеспечения в нашей фирме есть эта проблема: сценарии содержат#!/bin/sh
первую строку, но это также зависит от функциональности bash.источник
#!/usr/bin/env bash
который является немного более портативным.Убедитесь, что первая строка файла гласит:
Если шебанг есть
#!/bin/sh
, вы не должны использовать какие-либо специфические для bash функции, только POSIX. Даже если/bin/sh
это символическая ссылкаbash
, bash будет работать в режиме совместимости с POSIX при запуске от имени sh, отключая некоторые (но не все) функции bash.Вы также должны убедиться, что скрипт исполняемый.
источник
Альтернативный, сильно обескураженный способ - добавление
.
кPATH
.или
Проблема этого подхода заключается в том, что в первом случае любая системная команда может быть переопределена с помощью исполняемых файлов из текущего каталога, а во втором случае неизвестные команды могут быть переопределены.
Учтите следующее:
Файл: ls
Скорее всего, вы даже не заметите, пока не станет слишком поздно.
источник
echo
например, то, что в вашем каталоге будет использоваться просто потому, что этот каталог задан вPATH
переменной перед/bin
. Shell просто ищет команды в определенных каталогах в зависимости от их порядка вPATH
и не переопределяет / уничтожает что-либо. Но да, это имеет значение