当我的Node.js脚本从bin脚本运行时,我希望更改工作目录。我有类似以下的内容:
#!/usr/bin/env node
process.chdir('/Users')
当我用 ./bin/nodefile
运行这个文件时,它退出了,但是当前 shell 上下文的工作目录并没有改变。我也尝试过 shelljs,但那也不起作用。最好的方法是什么?我知道它是在一个单独的进程中工作的。
当我的Node.js脚本从bin脚本运行时,我希望更改工作目录。我有类似以下的内容:
#!/usr/bin/env node
process.chdir('/Users')
当我用 ./bin/nodefile
运行这个文件时,它退出了,但是当前 shell 上下文的工作目录并没有改变。我也尝试过 shelljs,但那也不起作用。改变目录的正确方式实际上是使用 process.chdir(directory)
。以下是来自文档的示例:
console.log('Starting directory: ' + process.cwd());
try {
process.chdir('/tmp');
console.log('New directory: ' + process.cwd());
}
catch (err) {
console.log('chdir: ' + err);
}
这也可以在Node.js REPL中进行测试:
[monitor@s2 ~]$ node
> process.cwd()
'/home/monitor'
> process.chdir('../');
undefined
> process.cwd();
'/home'
在Node中没有内置的方法可以改变运行Node进程的底层shell的当前工作目录(CWD)。
您可以通过命令process.chdir()
更改Node进程的当前工作目录。
var process = require('process');
process.chdir('../');
当Node进程退出时,你会发现自己回到了启动该进程的当前工作目录。do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
然后这个酷炫的东西是可以实现的:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
如果你需要进行更复杂的操作,你可以随时从该函数中调用你的nodejs脚本。
这是你能够完成你所要做的事情的唯一方式。
简短回答:没有(简单)方法,但你可以做一些有助于达成目的的事情。
我曾经做过类似的工具(一个小命令,根据项目描述设置环境、路径、目录等)。我的做法是设置好一切,然后用以下命令生成一个shell:
spawn('bash', ['-i'], {
cwd: new_cwd,
env: new_env,
stdio: 'inherit'
});
执行后,您将进入一个新的shell,其中包含新目录(在我的情况下还包括环境)。当然,您可以更改bash为您喜欢的任何shell。与您最初请求的内容相比,主要区别在于:
但是,对我而言,这些差异是可取的。
尝试这段代码:
const dirPath = path.join(__dirname, foldername);
process.chdir(dirPath);
process.chdir
。
process.chdir()
方法可更改 Node.js 进程的当前工作目录;如果更改失败(例如,指定的 directory
不存在),则会抛出异常。文档链接:https://nodejs.org/api/process.html#processchdirdirectory
import { chdir, cwd } from 'node:process';
console.log(`Starting directory: ${cwd()}`);
try {
chdir('/tmp');
console.log(`New directory: ${cwd()}`);
} catch (err) {
console.error(`chdir: ${err}`);
}
function cd(a, b) {
var a_path_arry = a.split('/');
var a_clear_path = [];
var b_clear_path = [];
a_path_arry.map((ele) => {
if(ele != '') a_clear_path.push(ele);
});
b_path_arry = b.split('/');
b_path_arry.map((ele) => {
if(ele != '') b_clear_path.push(ele);
});
b_path_length = b_clear_path.length;
for(var i=0;i<b_path_length;i++) {
if(b_clear_path[i] == '.') {
continue;
} else if(b_clear_path[i] != '..') {
a_clear_path.push(b_clear_path[i])
}
else {
a_clear_path.pop();
}
}
var path = '';
a_clear_path.map((ele)=> {
path += ele + '/';
});
console.log(path);
}
cd('a/b/c', './//d/e');
require("fs")
进行操作时,工作目录不会受到影响。 - Yan King Yin