3

私は一日の大部分を答えを求めてどこでも探していましたが、これまでのところ何もうまくいきませんでした. 私がやろうとしているのは、GNU スクリーン セッションにアタッチし、コマンド ライン引数 (コマンド) を送信し、その 1 つのコマンドの結果を出力する、expect スクリプトを実行することです。これまでのところ、これは私のスクリプトの1つです:


#!/usr/bin/expect -f


set timeout 3
#exp_internal 1

spawn screen -raAd call_sess
sleep 1

expect -re "\\\$" {
  send $argv
  send "\n"
  sleep 1
}

expect -re ".*" {
    set output $expect_out(0,string)
}

expect "\$" {
  send "\001"
  send "d"
}

expect eof {
  puts "OUTPUT---------------"
  puts $output
  puts "OUTPUT---------------"
}

$expect_out(0,string) は改行のみに一致しますが、.* は最後の一致以降のすべてに一致する必要があります。誰かが私がこれをうまく機能させるのを手伝ってくれるなら、私はあきらめてそれを不可能と呼ぶ準備ができています.

編集:コメントで回答しましたが、コマンドが画面で実行されることを指定する必要がありました。出力を正しくキャプチャできません。

EDIT2: スクリプトを提案どおりにスポーン画面に変更しました、ありがとう!

4

1 に答える 1

2

答えの簡単な部分は.*、空の文字列と一致することです。つまり、になりexpect_outます。

難しいのは、画面に前のコマンドを含む画面全体が表示されることです。そのため、送信したコマンドの出力を見つけるのは少し難しいかもしれません。

于 2012-11-07T19:17:28.010 に答える