用PHP模拟cd命令

时间:2019-01-08 09:52:29

标签: php symfony cd

我正在使用symfony/console作曲家软件包制作一个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脚本的工作目录。 exec()开始一个完全隔离的过程。

期望的行为

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

我的问题:这种行为甚至可以通过PHP来实现吗?如果是这样,我如何实现这一目标。

谢谢。

1 个答案:

答案 0 :(得分:2)

否,您无法通过在终端中运行脚本来更改终端的工作目录。

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