如何使用Node.js更改实际的外壳CD

时间:2019-01-13 00:45:13

标签: node.js shell command-line

我正在创建一个命令行程序以充当我的环境的快捷方式。像$ cd $enterprise/products/<product>这样的命令是如此常见,我喜欢将其编译为:$ enterprise product

我的问题是:我无法像在$ cd $enterprise/products/<product>上运行process.chdir那样直接更改shell目录。

使用console.log(process.cwd())显示目录已更改,但在shell上没有更改,仅在nodejs内部进程上(我认为它在自己的shell上运行)。

在shell中键入$ pwd表明我仍然在同一文件夹中。

我正在寻找一种解决方案,例如解释nodejs文件输出的shell脚本,然后source输出。

谢谢。

2 个答案:

答案 0 :(得分:1)

您无法执行此操作;每个子进程都有从父进程继承的自己的工作目录。在这种情况下,您的cd从其父目录(您的shell)中获取其工作目录。子进程无法更改父进程的目录或任何其他状态。

答案 1 :(得分:1)

这实际上比听起来有些棘手。 您不能只更改正在运行该进程的Shell的工作目录,而不必假设它是哪个Shell或操作系统(我个人使用applescript生成新的终端选项卡)。

但是,我们能做的是生成一个新的shell!

0

运行此命令时,好像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' }, }, ); 进入目录,但实际上您仍在nodejs内运行!