Для файлов .sh требуется `sh app.sh` даже со строкой `#!/bin/bash`

Для файлов .sh требуется `sh app.sh` даже со строкой `#!/bin/bash`

У меня сложилось впечатление, что если я включу строку

#!/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.

Это не было вашей проблемой, но может ею стать, если вы не знаете этих тонких различий.

Связанный контент