Как я могу изменить фактический компакт-диск оболочки с nodejs - PullRequest
0 голосов
/ 13 января 2019

Я создаю программу командной строки, которая будет действовать как ярлык для моей среды. Команды типа $ cd $enterprise/products/<product> настолько распространены, что я люблю их компилировать в: $ enterprise product.

Моя проблема: я не могу изменить директорию оболочки напрямую, например, запустить $ cd $enterprise/products/<product> с process.chdir.

Использование console.log(process.cwd()) показывает, что каталог изменился, но не в оболочке, а только во внутреннем процессе nodejs (я думаю, что он работает в собственной оболочке).

Ввод $ pwd в оболочке показывает, что я все еще нахожусь в той же папке.

Я искал решение, например сценарий оболочки, который интерпретирует выходные данные файла nodejs, а затем source выходные данные.

Спасибо.

Ответы [ 2 ]

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

Это немного сложнее, чем кажется. Вы не можете просто изменить рабочий каталог оболочки, в которой выполняется процесс, не делая предположений о том, какая это оболочка или ОС (я лично использую яблочный скрипт для создания новых вкладок терминала).

Однако мы можем создать новую оболочку!

let child_process = require('child_process');
child_process.spawn(
  // With this variable we know we use the same shell as the one that started this process
  process.env.SHELL,
  {
    // Change the cwd
    cwd: `${process.cwd()}/products/${product_id}`,

    // This makes this process "take over" the terminal
    stdio: 'inherit',

    // If you want, you can also add more environment variables here, but you can also remove this line
    env: { ...process.env, extra_environment: 'some value' },
  },
);

Когда вы запускаете это, кажется, что вы cd в каталог, но на самом деле вы все еще работаете внутри nodejs!

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

Вы не можете сделать это; каждый дочерний процесс имеет свой рабочий каталог, унаследованный от родительского процесса. В этом случае ваш компакт-диск получает свой рабочий каталог от своего родителя (вашей оболочки). Дочерний процесс не может изменить каталог - или любое другое состояние - родительского процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...