用PHP模拟'cd'命令

用PHP模拟'cd'命令,php,symfony,cd,Php,Symfony,Cd,我正在使用composer软件包为工作制作CLI工具。(很像) 此工具的目标是改进我的同事的日常工作流程 我的[COMPANY]install命令将安装当前工作目录中的所有活动存储库。我将此目录保存在主目录的配置文件中 现在我想添加一个[COMPANY]cd命令,通过将终端的当前目录更改为安装目录来模拟实际的cd命令。到目前为止,我已经尝试了以下方法: 我已经尝试过的 protected function handle(): void { $config = new Config;

我正在使用composer软件包为工作制作CLI工具。(很像)

此工具的目标是改进我的同事的日常工作流程

我的
[COMPANY]install
命令将安装当前工作目录中的所有活动存储库。我将此目录保存在主目录的配置文件中

现在我想添加一个
[COMPANY]cd
命令,通过将终端的当前目录更改为安装目录来模拟实际的
cd
命令。到目前为止,我已经尝试了以下方法:

我已经尝试过的

protected function handle(): void
{
    $config = new Config;
    $path = $config->get('directory');

    if (is_null($path)) {
        $this->error("It seems like you didn't install the [COMPANY] projects. Take a look at the `[COMPANY] install` command.");
        exit;
    }

    // These options do not work because they are executed in an isolated sub-process.
    chdir($path);
    exec("cd $path");
    shell_exec("cd $path");

    $this->info("Changed working directory to $path");
}
chdir()
方法仅更改当前php脚本的工作目录。而
exec()
启动一个完全隔离的进程

期望的行为

~                     cd ~/Development/Company
~/Development/Company company install
~/Development/Company cd ~
~                     company cd
~/Development/Company
我的问题是:这种行为在PHP中可能吗?如果是的话,我如何才能做到这一点


提前感谢。

不,您不能通过在终端中运行脚本来更改其工作目录


cd
是内置在shell中的命令,而不是外部命令,例如
/bin

否,您不能通过在其中运行脚本来更改终端的工作目录


cd
是内置在shell中的命令,而不是外部命令,例如
/bin

这是否有帮助?不,shell_exec也会启动一个单独的进程。我想把什么东西挂在终端上。我将在我的帖子中添加
shell\u exec
。怎么样
exec('cd~/Development/Company&&Company install&&cd~')
?我不想在cd之后安装。我想将用户导航到工作目录,只是为了理解,您想在终端中运行PHP脚本,当它完成后,您应该在另一个文件夹中,因为PHP已经重定向了您?这会有帮助吗?不,shell_exec也会启动一个单独的进程。我想把什么东西挂在终端上。我将在我的帖子中添加
shell\u exec
。怎么样
exec('cd~/Development/Company&&Company install&&cd~')
?我不想在cd之后安装。我想将用户导航到工作目录,只是为了理解,您想在终端中运行PHP脚本,当它完成后,您应该在另一个文件夹中,因为PHP已经重定向了您?您有源代码吗?还是这是常识?实际的
cd
命令是如何执行的?或者这是一个受操作系统保护的命令?您有源代码吗?还是这是常识?实际的
cd
命令是如何执行的?或者这是一个受操作系统保护的命令?