Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用cli脚本更改终端工作目录?_Php - Fatal编程技术网

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

Php 如何使用cli脚本更改终端工作目录?,php,Php,我想从cli脚本更改Linux终端中的目录,而不是PHP当前工作目录——希望使用shell_exec() 例如:从user@host:~$至user@host:/the/other/目录$ 不允许使用system()和exec() 这在我的情况下不起作用: $dir = '/the/other/directory'; shell_exec('cd '.$dir); 也不是这些 shell_exec('cd '.escapeshellarg($dir)); shell_exec(escapesh

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

例如:从
user@host:~$
user@host:/the/other/目录$

不允许使用
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\u exec('ls'.$dir)
给了我该目录中的列表。任何欺骗?

shell_exec所做的本地更改只适用于该php进程,因此ls将从另一个目录获取。但是,当您退出php时,您又回到了bash,而bash从来都不关心该进程做什么

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

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

这将在new dir中启动另一个终端,但脚本将等待您退出此shell。

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

shell> eval `your/cli/script`
在你的剧本中,做一些

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

?>

当您像现在这样执行多个命令时:

shell_exec('cd '.escapeshellarg($dir));
shell_exec(escapeshellcmd('cd '.$dir));
这行不通。第一个命令与第二个命令无关,因此不能使用第一个命令的结果来执行第二个命令

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

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

您有权限访问该文件夹吗?您怎么能说它不工作?@hakre cwd没有更改到所需位置您怎么能这么说?在同一个shell_exec中,我没有看到任何pwd调用显示您实际验证了shell中的目录更改。我认为PHP会按原样处理它们,前面的命令不会影响以下内容。使用chdir。