2016-11-15 34 views
0

シェルスクリプトと異なるスクリプト言語を使用するのは初めてのことです。expectスクリプト:lsコマンドの出力を変数に設定する

は、私は、次のbashスクリプト

#!/bin/bash 
var=$(ssh [email protected] ls path | grep 'keyword') 

echo $var 

for x in $var; 
# do stuff 
done 

などを介してループに変数へのSSH lsコマンドの出力を設定したい場所のスクリプトを期待して書いているしかし、私はどのようにわからないんだけどこれをexpectスクリプトで行います。私が検索した他の例は、sendの出力を変数に設定しているようです - これはルートですか?

ありがとうございました。

答えて

0

送信されたコマンドの出力をexpect変数に取り込むことは、実際にはPITAです。キャプチャされた出力には、コマンドとプロンプトが含​​まれています。プロンプトが"> "で、dateコマンドを送信したとします。 (アップ

  • ^[^\n]+\nはあなたが送るコマンドと一致します。その複雑なパターンで

    send -- "date\r" 
    expect -re {^[^\n]+\n(.*)\r\n> $} 
    set output $expect_out(1,string) 
    

    :出力をキャプチャする

    "date\r\nTue Nov 15 11:34:16 EST 2016\r\n> " 
    

    だから、あなたがこれを実行する必要があります。これを見ることを期待最初の改行に) - これはdate\r\n

  • (.*)\r\nです(最後のlまでINE
    • が変数expect_out(1,string)
  • > $で撮影したテキストを保存することを期待)、終了すると、あなたのプロンプトに一致するところです。

だからあなたのプログラムは次のようになります。

#!/usr/bin/env expect 
spawn ssh [email protected] 
expect -re {\$ $}  ;# regular expression to match your prompt 

send -- "ls path | grep keyword\r" 
expect -re {^[^\n]+\n(.*)\r\n$ $} 
set output $expect_out(1,string) 

send -- "exit\r" 
expect eof 

puts $output 
+0

それは言う:「expect_out(1、文字列)」を読み取ることができません:そのような変数 – chungkim271

+0

はドル記号やスペースを使用してプロンプト終わりもしませんか?そうでない場合は、その正規表現を調整する必要があります。 –

関連する問題