私は間違いなくC#を初めて使っていますが、別の場所で仕事が残っているので、愚かな質問をすると穏やかになります(これは簡単だと思います)。私はSSH.NETを使用していますが、現在のコードは間違っているわけではありませんが、前の人が書いた方法で、反対側に開いているssh接続を残すことができます。C#SSH Create.Command改行構文
現在の作業コードは通常通りSSHセッションを開きますが、リモートシステム上でコマンドを実行するには、このようなものを使用しています。
Stream.Writeline("part of the command")
Stream.Readline();
Stream.Writeline("second part of command")
Stream.Readline();
Stream.Writeline("last part of command")
Stream.Readline();
それはしかし、私は繰り返し回数を見てきたはずですので、これは正確にデータを連携し、収集します後でSSH接続がリモートシステム上で開いたままになります。私の問題は、それはだ、私は、リモート・システム上で実行したいコマンドを実行するためにリターンを必要とすることである
command1 = client.CreateCommand("full command to run")
result = command1.Execute()
:私は何をしたいのようcreate.commandを経由して、すべて単一のコマンドの中にこれを送っていますデータベースコマンド:
command1 = client.CreateCommand("mysql -u user <<EOF\nselect COUNT(*) from table1\ngo\nEOF\n")
/1がCreate.Commandにリターンを挿入するにはどうすればよい:私がやりたいのは何
mysql -u user <<EOF
select COUNT(*) from table1
go
EOF
?私はそう仮定しています。理由はありませんが、Create.Commandを介して上記の各行の後に返す必要があるデータベースコマンドを送信するための正しい構文を見つけるのは苦労しています。私は改行のために\ nを使ってみましたが、99%は間違って使っています。
DBの例としてmysqlを使用しましたが、実際にはsybaseデータベースですが、その構文を使用して接続します。
の\ N 'や他のエスケープ、または ''学びます@「」 'リテラル(逐語的な文字列) – SLaks
また、SQLコマンドでBashのheredoc構文を使用しないでください。それは動作しません。 – SLaks
おかげで、\ nが機能していたことがわかりました。期待した出力が得られませんでした。 Stream.Writelineを使うのではなく、Create.Commandを使って作業しているものを解析した後、はるかに高速に動作します。 – Ryan