Всем привет!
Я столкнулся с какой-то проблемой, учась объединять файлы .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. Но почему я не могу запустить его с терминала?
использовать ./filename.sh
независимо от того, находятся ли они в одной папке или нет, без предоставления ./ система ищет переменную пути. (/ bin /, / usr / bin и т. д.)
Включен ли бит бит?
chmod +x test.sh
Ваша переменная $ PATH может не включать '.' – поэтому оболочка не сможет найти команду для запуска.
Как говорили другие, sh./file.sh будет работать …
Возможно, ваша среда отличается при запуске с терминала и при запуске через двойной щелчок. Попробуйте выполнить which php
и echo $PATH
из терминала, чтобы узнать, что это за сделка.
ИЗМЕНИТЬ 1
Как отмечали другие, если ваша «команда не найдена» относится к скрипту оболочки, а не к php, то вы, вероятно, забыли включить «./» перед именем скрипта (т.е. ./test.sh
). Кроме того, не забудьте сделать его исполняемым, вызвав chmod a+x test.sh
Причиной этого является то, что PATH не включает текущий каталог (т. Е. «.»), Поскольку это будет представлять угрозу безопасности (например, папки с тонны файлов в них, включая поддельный «ssh», который затем может перехватить ваш пароль или т.п).
EDIT 2
Кроме того, я не знаю о вас, но ${0/%cli/}
оценивает -bash
из моего терминала. Вы уверены, что это то, что вы хотели, чтобы оно расширилось? Возможно, вы должны указать точное имя файла.
Другой вариант – запустить его с помощью sh (или bash, если sh на вашем компьютере не bash, а скрипт использует bashims)
sh filename.sh bash filename.sh
Это будет работать независимо от того, является ли файл исполняемым или в $ PATH