4

vim のsystem関数のドキュメントには、2 番目の引数について次のように書かれています。

{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 コマンドを実行しました (2 行目が結果です)。

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

わかりました、それは正しいようです。2 番目のテスト:

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

一時ファイルの名前を取得する代わりに、空白行を取得しました。process.argvさらに、 node.js スクリプトで印刷すると、 ['node', 'path/to/something.js', '--file'].

{input}引数の使用方法について何が欠けていますか? では機能しているように見えますが、自分のスクリプトでは機能しcatないのはなぜですか?echo

4

1 に答える 1

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())。

于 2013-03-22T21:00:57.547 に答える