当我从bin脚本运行Node.js脚本时,我试图更改它的工作目录。我得到了如下结果:
# !/usr/bin/env node
process.chdir('/Users')
当我用./bin/nodefile
运行这个文件时,它退出了,但是当前shell上下文的工作目录没有改变。我也试过shelljs,但是也不起作用。
最好的方法是什么?我知道它是有效的,但它只是在一个单独的过程。
当我从bin脚本运行Node.js脚本时,我试图更改它的工作目录。我得到了如下结果:
# !/usr/bin/env node
process.chdir('/Users')
当我用./bin/nodefile
运行这个文件时,它退出了,但是当前shell上下文的工作目录没有改变。我也试过shelljs,但是也不起作用。
最好的方法是什么?我知道它是有效的,但它只是在一个单独的过程。
6条答案
按热度按时间uurv41yg1#
更改目录的正确方法实际上是使用
process.chdir(directory)
。这也可以在Node.js REPL中测试:
kqqjbcuj2#
Node没有内置的方法来更改运行Node进程的 * 底层shell* 的CWD。
您 * 可以 * 通过命令
process.chdir()
更改 * 节点进程 * 的当前工作目录。当节点流程存在时,您将发现自己回到了启动流程的CWD中。
bkhjykvo3#
您尝试执行的操作是不可能的。这是因为在POSIX系统(Linux、OSX等)中,子进程不能修改父进程的环境。这包括修改父进程的工作目录和环境变量。
当您在命令行上执行Node脚本时,您当前的进程(
bash
,zsh
,等等)会产生一个新的进程,它有自己的环境,通常是您当前环境的副本(可以通过系统调用来改变它;但这超出了本文的讨论范围),允许该进程在完全隔离的情况下执行它需要执行的任何操作。当子进程退出时,控制权被交还给shell进程,在那里环境没有受到影响。这有很多原因,但其中一个原因是,假设您在后台执行一个脚本(通过
./foo.js &
),当它运行时,它开始更改您的工作目录或覆盖您的PATH
。如果你需要执行一些需要改变shell工作目录的操作,你需要在shell中编写一个函数,例如,如果你正在运行Bash,你可以把这个函数放在
~/.bash_profile
中:然后这个很酷的事情是可行的:
如果您还需要做更复杂的事情,您可以随时从该函数调用您的nodejs脚本。
这是你能完成你想做的事的唯一方法。
cunj1qz14#
简短回答:没有(容易的?)方法,但你可以做一些服务于你的目的。
我做过一个类似的工具(一个小命令,给出一个项目的描述,设置环境、路径、目录等)。我所做的是设置好一切,然后使用以下命令生成一个shell:
在执行之后,您将在一个具有新目录的shell上(在我的例子中,还有environment)。当然,您可以将bash更改为您喜欢的任何shell。与您最初要求的主要区别在于:
然而,对我来说,这种差异是可取的。
b5buobof5#
请尝试以下代码:
hmae6n7t6#