
У меня сложилось впечатление, что если я включу строку
#!/bin/bash
в начале моего файла он будет распознан как скрипт bash, который я могу запустить просто
file.sh
вместо
sh file.sh
Но в моем случае, file.sh
дает что-то вроде test.sh
дает test.sh: command not found
. Почему так?
ОБНОВЛЯТЬ
Я заметил, что мне нужно использовать ./
. Но я думал, что он все равно будет искать в текущем каталоге?
./test.sh
решение1
Сначала необходимо убедиться, что файл является исполняемым:
chmod +x file.sh
А затем, чтобы запустить его, вам нужно либо поместить его в PATH, т. е. в один из каталогов файлов, которые ОС ищет при поиске файлов для запуска, который вы можете найти с помощью echo $PATH
, либо вам нужно ввести:
./file.sh
Вместо того, чтобы просто набрать file.sh
.
Вы можете просто ввести file.sh
, если он есть в вашем PATH, что я и рекомендую. Хорошее место — ~/bin
. Создайте эту папку, если ее там нет, и в Ubuntu она будет добавлена в ваш путь, когда вы войдете в систему.
решение2
Вам нужно запустить его с помощью ./file.sh, поскольку текущий каталог отсутствует в PATH.
Если этого недостаточно, потому что вы пропустили то, что предлагает frabjous, chmod a+x
вам следует начать программы, начинающиеся с shebang #!/bin/bash
с
bash file.sh
нет
sh file.sh
даже если sh является символической ссылкой на /bin/bash.
Оболочка проверяет, как она была вызвана, и может быть вызвана так, sh
чтобы действовать в совместимом режиме, поэтому она может не справиться с некоторыми башизмами, которые работали бы, если бы была вызвана как bash file.sh
.
Это не было вашей проблемой, но может ею стать, если вы не знаете этих тонких различий.