如何用cli脚本更改终端工作目录?

时间:2012-05-05 16:02:45

标签: php

我想从cli脚本更改Linux终端中的目录,而不是PHP当前工作目录 - 希望使用shell_exec()。

例如:从user@host:~$user@host:/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)给了我该目录中的列表。任何诡计?

3 个答案:

答案 0 :(得分:2)

当你执行几个像你正在执行的命令时:

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

它无效。第一个命令与第二个命令无关,因此你不能使用第一个命令的结果来执行第二个命令。

如果要执行一系列命令,请使用管道符号|,如:

echo shell_exec("ls /etc/apache2 | grep fileName");

答案 1 :(得分:0)

shell_exec进行的本地更改仅适用于该php进程,因此ls将从该其他目录中获取。但是当你退出php时,你又回到了bash,他从不真正关心过程是什么。

我怀疑你可以从外面改变bash的当前目录。 如果你需要在其他目录中运行bash,你可以在php中尝试这个:

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

这将在新目录中启动另一个终端,但脚本将等到你退出此shell。

答案 2 :(得分:0)

如果您的意思是想通过调用php cli脚本来更改父shell的目录,那么就不能这样做。你能做的就是充其量:

shell> eval `your/cli/script`

并在您的脚本中执行类似

的操作
<?php
...
    echo "cd $dir"

?>