首页 > 解决方案 > 用 PHP 模拟 `cd` 命令

问题描述

我正在使用symfony/consolecomposer 包制作一个用于工作的 CLI 工具。(很像laravel/installer

该工具的目标是改善我同事的日常工作流程。

我的[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 脚本的工作目录。Whileexec()启动一个完全隔离的进程。

期望的行为

~                     cd ~/Development/Company
~/Development/Company company install
~/Development/Company cd ~
~                     company cd
~/Development/Company

我的问题:这种行为甚至可以用 PHP 实现吗?如果是这样,我怎么能做到这一点。

提前致谢。

标签: phpsymfonycd

解决方案


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

cd是您的 shell 中内置的命令,而不是例如/bin.


推荐阅读