Выполнение скрипта оболочки

Выполнение скрипта оболочки

У меня есть два файла скрипта оболочки с абсолютно одинаковыми разрешениями и т. д. Я могу запустить один из них, просто указав его имя в командной строке, но для другого мне нужно использовать sh или ./, чтобы запустить его. В чем причина?

решение1

Скорее всего, эти 2 скрипта находятся в разных каталогах. Один из каталогов есть в PATH, а другой нет.

Вы можете использовать эту typeкоманду для проверки наличия файла в переменной $PATH вашей текущей оболочки.

$ type start_dropbox.bash
start_dropbox.bash is /home/saml/bin/start_dropbox.bash

См. этот вопрос и ответ U&L "Как проверить, существует ли приложение в $PATH?" для более подробного освещения.

решение2

Если вы просто указываете имя скрипта и он работает, то он у вас в /usr/bin/ /usr/sbin или где-то еще. Все зависит от того, какой у вас установлен путь.

Сделай это:

1. echo $PATH

Если ваш скрипт находится в любом из этих каталогов, он будет запущен без использования абсолютного пути.

2. whereis "scripts name"

Whereis или "which" подскажут вам, где он находится. Вы даже могли дать одному файлу права на выполнение, а другому нет. Для того, который не запускается только с именем, сделайте chmod u+x

  1. Возможно, вам придется добавить #!/usr/bin/env python, если это скрипт Python, или #!/usr/bin/env bash, если это bash, и так далее.

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