2014-02-19 3 views
0

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

Сохранить как build.php

<?php 
shell_exec('cd ..'); 
echo "php executed\n"; 
?> 

Из командной строки

php build.php 

Выходной

php executed 

Php правильно выполняет, но я до сих пор в том же каталоге. Как мне получить shell_exec (...), чтобы успешно вызвать команду оболочки?

+0

Что вы ожидаете от 'cd ..'? –

+0

сценарий запускает собственную оболочку. Я не верю, что есть способ заставить скрипт изменить вашу оболочку. – Cfreak

+0

@AliMasudianPour Я ожидаю перейти в родительский каталог – Emanegux

ответ

4

Вы должны изменить cwd (текущий рабочий каталог) в PHP ... любая cd команда, которую вы выполнить с помощью exec() и его сестра функции будут влиять ТОЛЬКО оболочку, что ехес() вызывает вызов, и все, что вы делаете в оболочке.

<?php 
    $olddir = getcwd(); 
    chdir('/path/to/new/dir'); //change to new dir 
    exec('somecommand'); 

выполнит somecommand в /path/to/new/dir. Если вы

<?php 
    exec('cd /path/to/new/dir'); 
    exec('somecommand'); 

somecommand будет выполняться в любой каталог, который вы начали PHP скрипт - cd вы exec'd только одна линия назад будет перестала существовать и, по существу, нулевой операцией.

Обратите внимание, что если вы сделали что-то вроде:

<?php 
    exec('cd /path/to/new/dir ; somecommand'); 

тогда ваша команда будет выполнена в этом каталоге ... но опять же, как только что выходы оболочки, изменение каталога перестает существовать.

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