# index.js
console.log(process.argv) // expect this to print [.., .., '1']
# terminal
$ echo 1 | node index.js // just prints [.., ..]
Run Code Online (Sandbox Code Playgroud)
有什么诀窍?如何通过 unix 命令(如echo、ls、等)从命令行将参数动态传递给节点脚本ps aux?
注:我看到,我可以读取UNIX命令的输出中使用我的剧本stdin,但我想是真正的参数传递到命令行脚本。
Run Code Online (Sandbox Code Playgroud)$ echo 1 | node index.js
在此命令中echo打印1到标准输出,该输出被重定向(通过管道)到node接受index.js参数的命令的标准输入。如果要读取由 打印的字符串echo,请读取标准输入,例如:
var text = '';
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function () {
var chunk = process.stdin.read();
if (chunk !== null) {
text += chunk;
}
});
process.stdin.on('end', function () {
console.log(text);
});
Run Code Online (Sandbox Code Playgroud)
如何通过诸如 echo、ls、ps aux 等 Unix 命令从命令行动态地将参数传递给节点脚本?
使用管道,您只能重定向命令的批量输出。您可以使用命令替换将多个命令的输出作为字符串传递,例如:
node index.js --arg1="$(ls -ld /tmp)" --arg2="$(stat -c%a /tmp)"
Run Code Online (Sandbox Code Playgroud)
将命令的输出分配给 shell 变量,以使您的脚本更具可读性:
arg1="$(ls -ld /tmp)"
node index.js --arg1="$arg1"
Run Code Online (Sandbox Code Playgroud)
我的一个朋友给我看了这个:
$ node index.js `echo 1 2 3 4`
Run Code Online (Sandbox Code Playgroud)
实际上正是我想要的。这将导致:
// index.js
process.argv // [.., .., '1', '2', '3', '4']
Run Code Online (Sandbox Code Playgroud)
这个和 @RuslanOsmanov 答案之间的区别在于,上面的内容将把输出作为节点进程的所有参数传递,而:
$ node --arg1=`echo 1` --arg2=`echo 2`
Run Code Online (Sandbox Code Playgroud)
每个单独的参数都需要单独的命令。
如果您的文件名包含空格,它将无法按预期工作ls,因为空格字符被视为参数分隔符。
请参阅反引号 - ` - 在命令行调用中具体针对 Git 命令有何作用?有关反勾号使用的更多信息。
| 归档时间: |
|
| 查看次数: |
3088 次 |
| 最近记录: |