2012-01-20 14 views
3

私はかなりのコードを実行するレーキタスクを持っています。最後に、私はsftpとsshを使っていくつかのことをする必要があります。現時点で私はそれを自動化することができません。 stdoutに渡す方法はありますか?Rubyからshコマンドに変数を渡すにはどうすればいいですか

これは単純な質問のように思えるが、私はどこにも

#some ruby code 
#more ruby code 
sh "sftp [email protected]" #this opens the sftp console 
sh "put file" #this doesn't get run until sftp is exited 
sh "put another_file" #neither does this 

#more ruby code 
sh "ssh host" # opens the ssh console 
sh "some_action_on_host" # this doesn't get run until ssh is exited  

私はルビーを使用してSFTPとsshを行う方法があるだろう知っているが、理想的に、私はちょうどパイプ変数にできるようにしたい答えを見つけることができませんコンソールにコマンドを入力する

+0

[Net :: SSH](http://net-ssh.github.com/ssh/v2/)を使用するよりも、コマンドライン経由でSSHセッションを動かそうとしています。 api/index.html)モジュールは、一度に1つのコマンドを送信しない限り、端末とコマンドラインの対話的な性質のために使用できます。 Net :: SSHはあなたにかなりの制御を与えます。 –

答えて

4

これで、sftpを実行して一連のコマンドを送信しますか?どうすればいいのでしょうか:

sftp = IO.popen("sftp [email protected]", "w+") 
sftp << "put file\n" 
sftp << "put another file\n" 
sftp.flush # make sure to include this 
0

ruby​​を使いたくない場合は、シェルコマンドを `(バックティック文字)で囲むことができます。この文字列はKernel.`メソッドに渡されます。この方法は、OSのシェルコマンドとしてテキストを実行し、文字列としてコマンドの出力、例えば: `%x[]あると

`ls` 

別の構文を返します。あなたはどんなbashスクリプトを書くことができますこの方法:

%x[sftp [email protected] <<COMMAND 
    put #{file} 
    quit 
COMMAND] 

は(二重引用符で囲まれた文字列リテラルと同様)#{...}構文を使用して、この構文をサポートルビー式補間ますのでご注意ください。

関連する問題