我正在使用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来实现吗?如果是这样,我如何实现这一目标。
谢谢。
答案 0 :(得分:2)
否,您无法通过在终端中运行脚本来更改终端的工作目录。
cd
是内置在您的Shell中的命令,而不是外部命令,例如/bin
。