2016-12-20 6 views
1

機能でコマンドをbashの(他の関数の結果として、今のところのは、簡単のためsに保管しましょう)と私はを通じて、それアウト書き込みしたいですpipeをbashコマンドに追加します。 (それはパイプでなければならない、この種の入力を引数として受け入れることはできない)パイプストリングは、私は、文字列を持っている

mycommandをどうすればいいですか、つまり...にはどうすればいいですか?パイプ経由

:let s = "my string" 
:set shell=/bin/bash 
:exe "!cat <<< " . shellescape(s) 

出力

my string 

:ここに文字列経由

function! MyFunc() 
    let s = "my string" 
    execute ... !mycommand --flag 
endfunction 

答えて

3

:exe "!echo " . shellescape(s) . " | cat " 
+0

私はこれがまさに私が探していたものだと思います!なぜあなたは 'echo' + '' 'より' <<< 'を好むでしょうか? –

+1

@PeterVaro、まあ、ここでは文字列が短く、 'echo'や' printf'は必要ありません。私は確信していませんが、私はここでは文字列がパイプではなく子プロセスをフォークしないと思います。しかし、パイプは移植可能です。 –

+0

興味深いことに: 'MyFunc'がhere-stringまたはpipeを持つことができるキーに':call MyFunc() 'をマップすると、どちらも私にヒットする必要がありますを入力します。これはどんな考えですか? –

1

は、あなたがこの

を試みることができます
:execute "!\"".s."\" | mycommand" 
+0

私は努力を感謝しますが、' RleslanOsmanovは '' shelllescape'組み込み関数を ' s' - 連結された文字列を安全に実行します! –

+0

@PeterVaro:洞察をいただきありがとうございます。私はここでほとんど学ぶためにここに来る。これでも刺すことを望んでいた。 –

関連する問題