У меня есть два файла скрипта оболочки с абсолютно одинаковыми разрешениями и т. д. Я могу запустить один из них, просто указав его имя в командной строке, но для другого мне нужно использовать 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
- Возможно, вам придется добавить #!/usr/bin/env python, если это скрипт Python, или #!/usr/bin/env bash, если это bash, и так далее.