2013-08-15 27 views
5

System.Diagnostics.Process経由で次のパイプコマンドを実行できますか?MonoでSystem.Diagnostics.Process経由でパイプコマンドを実行

echo "test" | sudo -S shutdown -r +1 

上記の引数を使用してファイル名を "/ bin/bash"に設定しようとしましたが、成功しませんでした。あなたはtest | sudo -S shutdown -r +1がこだましてしまいますとsudoがないように

... 
var processStartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = "echo \"test\" | sudo -S shutdown -r +1" }; 
process.StartInfo = processStartInfo; 
... 

答えて

8

bashは、印刷のためにそれにそれがechoを呼び出し、(パイプ|を含む)すべての残りの部分を渡す意味、引数が続くファイル名として、あなたのコマンドを解釈しています実行される。

コマンドを実行するには、-cオプションを使用する必要があります。さらに、コマンド自体を単一の引数として渡すように、コマンド自体を引用する必要があります。このようなものはうまくいくはずです:

var processStartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = "-c \"echo test | sudo -S shutdown -r +1\"" }; 
+1

Linuxで動作します。ありがとうございました。 –

+1

この方法では、 "/ bin/bash -c echo test | sudo -S shutdown -r +1"のようなプロセスが作成されるため、rootパスワードが公開されるため、 "ps aux"を実行すると誰でも見ることができます。それ。 –

+0

はい、それはユーザーのパスワードを公開します。パイプに自分で書き込むことができるときは 'echo'を使うのは無意味です。 – Jester

関連する問題