2017-07-07 2 views
-1

私はexpectを使用しており、すでにssh connectionを確立しています。"expect"による出力変数

ls -1 /etc/folder/の結果を見たいです。

私は

send "files=$(ls -1 /etc/folder/)" 
put $files 

を試みたが、失敗しました。

どうすればいいですか?

答えて

1

大きな問題は、リモートシステム上に変数とローカル変数があり、まったく同じものではないということです。もちろん、システム間で変数を自動的に共有するシステムを構築することは可能ですが、これはデフォルトでは起こりません。これは、あなたがが正しくになる必要がある概念的なものです。そうしないと、偶然によって正しいコードを書くことはありません。

これ以外にも、コマンドを正しく送信していないという問題はありません。戻ってくる結果を処理していません。リモートシステムのプロンプトが$であり、ファイルがそれで始まっていないことがわかっていると仮定すると、これを行う必要があります。

# Note the \r; it is like pressing <Return> and is important! 
send "ls -1 /etc/folder \r" 
# Now we collect the output: 
set files {} 
expect { 
    "$ " { 
     puts $files 
    } 
    -re {^[^$].*$} { 
     # This grabs a line that doesn't start with $ and adds it to the list 
     lappend files $expect_out(0,string) 
     # Now we go back to waiting for another line or the prompt 
     exp_continue 
    } 
} 

そして、それは正確にあなたがそれを行う方法です。はい、かなりコードがかかります...

+0

ファイルリストの各要素の最後に改行があります。 '-re {^([^ $]。*)\ r?$} {ファイルを追加する$ expect_out(1、string); exp_continue} ' –

関連する問題