我想将参数传递给来自stdin的节点脚本。
一般来说,我正在为这样的事情拍摄
nodeScript.js | node {{--attach-args??}} --verbose --dry-run
与
相同node nodeScript.js --verbose --dry-run
这是一个简单的脚本,用于说明,dumpargs.js
console.log("the arguments you passed in were");
console.log(process.argv);
console.log("");
所以你可以:
node dumpargs.js --verbose --dry-run file.txt
[ 'node',
'/home/bill-murray/Documents/dumpargs.js',
'--verbose',
'--dry-run',
'file.js' ]
现在的问题是,如果该脚本跨越标准输入(例如,通过cat
或curl
)
cat dumpars.js | node
the arguments you passed in were
[ 'node' ]
是否有一种向其传递参数的好方法?
非节点:使用bash,这次使用
dumpargs.sh
echo "the arguments you passed in were" printf "> $@" echo
答案看起来像
cat dumpargs.sh | bash -s - "--verbose --dry-run file.txt" the arguments you passed in were > --verbose --dry-run file.txt
答案 0 :(得分:2)
这不是很好,但有效。
对node
的调用将启动REPL,因此您的问题应该等同于从终端手动设置/使用argv
。尝试做类似的事情:
// argv.js
process.argv[1] = 'asdf';
process.argv[2] = '1234';
并且正在执行cat argv.js dumpargs.js | node
。
答案 1 :(得分:1)
此用例具有特定的语法。医生说:
- Alias for stdin, analogous to the use of - in other command line utilities, meaning that the script will be read from stdin, and the rest of the options are passed to that script. -- Indicate the end of node options. Pass the rest of the arguments to the script. If no script filename or eval/print script is supplied prior to this, then the next argument will be used as a script filename.
因此,请执行以下操作:
$ cat script.js | node - args1 args2 ...
例如,这将返回“ hello world”:
$ echo "console.log(process.argv[2], process.argv[3])" | node - hello world