2010-04-01 3 views
0

HI там!Проблема с файлом bash

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

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

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

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

+0

Как вы выполнив скрипт? Вы, вероятно, называете это без предварительного ожидания пути (что-то вроде ./) –

ответ

6

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

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

0

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

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

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

0

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

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

+1

PATH не должен включать «.», Так как это риск для безопасности. –

0

Другой вариант, чтобы запустить его с ш (или Баш, если ш на вашей машине не колотить и сценарий использует bashims)

sh filename.sh 
bash filename.sh 

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

Смежные вопросы