3

我想从 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)给了我该目录中的列表。有什么诡计吗?

4

3 回答 3

2

当你像你一样执行几个命令时:

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

它行不通。第一个命令与第二个无关,所以不能使用第一个命令的结果来执行第二个命令。

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

echo shell_exec("ls /etc/apache2 | grep fileName");
于 2012-09-21T08:47:40.277 回答
0

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

我怀疑您可以从外部更改 bash 的当前目录。如果您需要在其他目录中运行 bash,您可以在 php 中尝试:

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

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

于 2012-05-05T16:31:54.457 回答
0

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

shell> eval `your/cli/script`

在你的脚本中做类似的事情

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

?>
于 2012-05-05T16:33:24.150 回答