Проблема с выполнением bash-файла - PullRequest
0 голосов
/ 01 апреля 2010

Привет!

Я столкнулся с некоторой проблемой, когда учился комбинировать файлы .sh и PHP. Я создал файл test.sh и в этом файле я вызываю файл PHP с именем test.php.

Если я дважды щелкну по файлу .sh, то он работает отлично, но когда я пытаюсь запустить его из терминала, я получаю «команда не найдена». Я в той же папке, что и мой файл .sh, но он не будет работать. Вот мой тест.sh:

#!/bin/bash
LIB=${0/%cli/}
exec php -q ${LIB}test.php one two three
exit; 

Когда я дважды щелкаю по файлу test.sh, он возвращает массив argv так, как ему нужно. Но почему я не могу запустить его из терминала?

Ответы [ 5 ]

6 голосов
/ 01 апреля 2010

использование ./filename.sh

независимо от того, находитесь ли вы в одной папке или нет, без указания ./ система ищет переменную пути (/ bin /, / usr / bin и т. д.)

1 голос
/ 01 апреля 2010

Разрешен ли бит выполнения?

chmod +x test.sh
0 голосов
/ 01 апреля 2010

Другой вариант - запустить его с помощью sh (или bash, если sh на вашем компьютере не bash и скрипт использует bashims)

sh filename.sh
bash filename.sh

Это будет работать независимо от того, исполняемый файл или нет в $ PATH

0 голосов
/ 01 апреля 2010

Ваша переменная $ PATH может не содержать '.' - поэтому оболочка может не найти команду для запуска.

Как уже говорили другие, sh ./file.sh будет работать ...

0 голосов
/ 01 апреля 2010

Возможно, что ваша среда отличается при запуске из Терминала и при двойном щелчке. Попробуйте выполнить which php и echo $PATH из терминала, чтобы узнать, в чем заключается сделка.

РЕДАКТИРОВАТЬ 1
Как уже отмечали другие, если ваша «команда не найдена» относится к сценарию оболочки, а не к php, то вы, вероятно, забыли добавить «./» перед именем сценария (т.е. ./test.sh). Кроме того, не забудьте сделать его исполняемым, вызвав chmod a+x test.sh. Причина этого заключается в том, что PATH не включает текущий каталог (т. Е. «.»), Потому что это будет представлять угрозу безопасности (например, папки с кучей файлов в них, включая поддельный «ssh», который может затем перехватить ваш пароль). или тому подобное).

РЕДАКТИРОВАТЬ 2
Кроме того, я не знаю о вас, но ${0/%cli/} оценивается в -bash из моего Терминала. Вы уверены, что это то, что вы хотели расширить до? Возможно, вам следует указать точное имя файла.

...