2012-05-05 5 views
3

Я хотел был бы изменить директорию в терминале Linux от cli-скрипта, не текущий рабочий каталог PHP - надеюсь, с shell_exec().Как изменить рабочий каталог терминала с помощью скрипта cli?

Ex: от [email protected]:~$ до [email protected]:/the/other/directory$

system() и exec() не допускаются.

Это не работает в моем случае:

$dir = '/the/other/directory'; 
shell_exec('cd '.$dir); 

ни эти

shell_exec('cd '.escapeshellarg($dir)); 
shell_exec(escapeshellcmd('cd '.$dir)); 
pclose(popen('cd '.$dir)); 

Но shell_exec('ls '.$dir) дает мне список в этом каталоге. Любой обман?

+0

Есть ли у вас прав для доступа к этой папке? – MikkoP

+0

Как вы можете сказать, что он не работает? – hakre

+0

@MikkoP Это 40775 – kodeart

ответ

0

Локальные изменения, сделанные shell_exec, применяются только к этому процессу php, и поэтому ls будет извлекаться из этого другого каталога. Но когда вы выходите из php, вы возвращаетесь к bash, который никогда не заботится о том, что происходит.

Сомневаюсь, что вы можете изменить текущий каталог bash извне. Если вам нужно запустить Баш в другом каталоге, вы можете попробовать это внутри PHP:

system('gnome-terminal --working-directtory=/home/doom'); 

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

0

Если вы хотите изменить каталог родительской оболочки, вызвав скрипт php cli, вы не сможете этого сделать. Что вы можете сделать, это в лучшем случае:

shell> eval `your/cli/script` 

и в сценарии что-то вроде

<?php 
... 
    echo "cd $dir" 

?> 
2

Когда вы выполнении нескольких команд, как вы делаете:

shell_exec('cd '.escapeshellarg($dir)); 
shell_exec(escapeshellcmd('cd '.$dir)); 

Он выиграл Не работай. Первая команда не имеет ничего общего со вторым, поэтому вы не можете использовать результаты 1-й команды для выполнения второй команды.

Если вы хотите выполнить последовательность команд, используйте символ трубы | как:

echo shell_exec("ls /etc/apache2 | grep fileName"); 
Смежные вопросы