Я делаю 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? И если так, как я могу достичь этого.
Заранее спасибо.
Нет, вы не можете изменить рабочий каталог терминала, запустив в нем скрипт.
cd
это команда, встроенная в вашу оболочку, а не внешняя команда, например, /bin
,
Других решений пока нет …