我正在创建一个命令行程序以充当我的环境的快捷方式。像$ 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
输出。
谢谢。
答案 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内运行!