Я создаю CLI-инструмент для работы, используя пакет композитора symfony/console
. (Очень похоже на 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? И если да, то как мне этого добиться.
Заранее спасибо.