How to use second argument (input) of system() function

ε祈祈猫儿з 提交于 2019-12-06 04:13:13

问题


The documentation to vim's system function says this about the second argument:

When {input} is given, this string is written to a file and passed as stdin to the command.

What I understood from that was that if your system call looked like this:

call system('node something.js --file', 'here is some text')

The command executed would look like this:

node something.js --file some/temp/file

and some/temp/file would have the text here is some text as its contents. To test this, I ran the vim command (the second line is the result):

:echo system('cat', 'here is some text')
here is some text

Ok, that looks right. A second test:

:echo system('echo', 'here is some text')
<blank line>

Instead of getting some temporary file's name, I got a blank line. Moreover, when I print process.argv in my node.js script, I just get ['node', 'path/to/something.js', '--file'].

What am I missing about how the {input} argument is to be used? How come it seems to work for cat, but not echo or my own script?


回答1:


You've got it wrong; the command executed is not

node something.js --file some/temp/file

but rather

echo "some/temp/file" | node something.js --file

or better

node something.js --file < some/temp/file

If you want text passed as arguments, just append this to the first argument of system() (properly escaped through shellescape()).



来源:https://stackoverflow.com/questions/15579613/how-to-use-second-argument-input-of-system-function

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!