В моем окне терминала (с использованием Max OS X) моя оболочка – bash. Однако когда я запускаю команду в PHP через shell_exec или операторы backtick, я вижу, что PHP использует оболочку Bourne (sh). Вот пример того, что я вижу:
Из моего окна терминала:
$ echo $0 - bash
Также, если я вызываю php следующим образом:
$ php -r "echo shell_exec('echo $0');" -bash
Однако, если я создаю скрипт под названием test.php со следующим:
<?php echo shell_exec('echo $0'); ?>
И затем запустите test php, я получаю следующее:
$ php test.php sh
Я хочу использовать оболочку bash при вызове shell_exec – почему он выбирает оболочку Bourne и могу ли я заставить ее использовать bash?
Благодаря!
Дэн
Переверните кавычки во второй команде:
$ php -r 'echo shell_exec("echo $0");' sh
С кавычками, как вы их в своем вопросе, переменная $0
расширяется до отправки команды на php
.
Если вы хотите принудительно использовать Bash, вы можете сделать что-то вроде:
php -r '$cmd="echo \\\$0"; echo shell_exec("/bin/bash -c \"$cmd\"");'
Вероятно, он читает переменную окружения SHELL. Не обращайте внимания, что putenv () не работает.
Попробуйте просто запустить команду, которую вы хотите с помощью bash, например
shell_exec("bash script.sh");
При условии, что:
одним из возможных (но не оптимальных) решений было бы изменение оболочки по умолчанию учетной записи пользователя, под которой выполняется ваш веб-сервер.