Intereting Posts
оставить пользователя вошедшим в систему, когда он снова зайдет на ту же страницу? выход из системы и перенаправление сеанса в php PHP занимает 90 раз больше времени для запуска запроса, чем клиент MySQL codeigniter данные передача контроллер-> библиотека-> просмотр Невозможно использовать буферизацию вывода в обработчиках отображения буферизации вывода Outlook 2003 не импортирует календарь .ics, а Outlook 2007 Правильно определите, является ли строка даты допустимой датой в этом формате Итерировать значения таблиц базы данных Хорошо ли использовать htmlspecialchars () перед вставкой в ​​MySQL? Вопрос безопасности PHP? Чтение и анализ содержимого очень большого файла Laravel – нетерпеливая загрузка метода (а не отношения) модели Eloquent Хорошо ли иметь BaseController и заставить все контроллеры расширять этот класс? Как запросить и получить пользовательский созданный XML-файл? CodeIgniter вызывает обратный вызов в пользовательском классе form_validation

Проблема с выполнением файла 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. Но почему я не могу запустить его с терминала?

использовать ./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