如何使用system()函数的第二个参数(输入)

时间:2013-03-22 20:49:40

标签: vim vim-plugin

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或我自己的脚本?

1 个答案:

答案 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()正确转义)。