以下は、シェルスクリプトのexpectで実行しようとしているコードです。シェルのコマンド出力を送信する
send "date +%d%m%y \n"
set date1 "$expect_out(buffer)"
puts "$date1"
expect "#"
私は取得しています出力は
date +%d%m%y
111217
あるコマンド(日付+%dは%mの%のy)を抑制し、のみvarialeのDATE1に出力を格納する方法はありますか?
以下は、シェルスクリプトのexpectで実行しようとしているコードです。シェルのコマンド出力を送信する
send "date +%d%m%y \n"
set date1 "$expect_out(buffer)"
puts "$date1"
expect "#"
私は取得しています出力は
date +%d%m%y
111217
あるコマンド(日付+%dは%mの%のy)を抑制し、のみvarialeのDATE1に出力を格納する方法はありますか?
これを試してみてください:最初の行(コマンド)の間のテキストと最後の行(プロンプト)を選択し、単語全体
より一般的にsend "date +%d%m%y\r" ;# typically we use \r to "hit enter"
expect -re {\m(\d{6})\M}
set date1 "$expect_out(1,string)"
puts "$date1"
expect "#"
として6桁の数字を見ることを期待し、あなたが行うことができます:_
は、正規表現の全体の一致するテキストを保持し、そしてdate1
のみ捕捉テキストを保持するスローアウェイ可変である
lassign [regexp -inline {.*?\n(.*)\r\n#} $expect_out(buffer)] _ date1
。
Tcl正規表現の構文については、https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htmを参照してください。
lassign
がなければ、あなたは
regexp {.*?\n(.*)\r\n#} $expect_out(buffer) _ date1
の可能な複製lassignが私のシステムで動作していません。コマンドの出力だけを得る他の方法はありますか? –
はあなたのコードは私のために動作しません書くことができます。 [mcve]を投稿してください。 –
@emily、あなたはこれが[tag:expect]コードであることを認識しています。 –
はい、それは明らかなコードです。しかし、 'expect'文はありませんので、私はOPに' $ expect_out(buffer) 'をどのように取得したのだろうと思いますか? –