Имитация команды `cd` с помощью PHP - PullRequest
0 голосов
/ 08 января 2019

Я создаю 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? И если да, то как мне этого добиться.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 января 2019

Нет, вы не можете изменить рабочий каталог терминала, запустив в нем скрипт.

cd - это команда, встроенная в вашу оболочку, а не внешняя команда, например, /bin.

...