vim system
函数的文档说明了第二个参数:
当给出{input}时,该字符串被写入文件并作为stdin传递给命令。
我从中理解的是,如果您的system
电话看起来像这样:
call system('node something.js --file', 'here is some text')
执行的命令如下所示:
node something.js --file some/temp/file
和some/temp/file
会将文本here is some text
作为其内容。为了测试这个,我运行了vim命令(第二行是结果):
:echo system('cat', 'here is some text')
here is some text
好的,看起来不错。第二次测试:
:echo system('echo', 'here is some text')
<blank line>
我得到一个空白行,而不是获得一些临时文件的名称。此外,当我在node.js脚本中打印process.argv
时,我得到['node', 'path/to/something.js', '--file']
。
我对如何使用{input}
参数缺少什么?为什么它似乎适用于cat
,而不是echo
或我自己的脚本?
答案 0 :(得分:4)
你弄错了;执行的命令是不
node something.js --file some/temp/file
而是
echo "some/temp/file" | node something.js --file
或更好
node something.js --file < some/temp/file
如果您希望将文本作为参数传递,只需将其附加到system()
的第一个参数(通过shellescape()
正确转义)。