2017-12-11 22 views
1

以下は、シェルスクリプトの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に出力を格納する方法はありますか?

+0

はあなたのコードは私のために動作しません書くことができます。 [mcve]を投稿してください。 –

+0

@emily、あなたはこれが[tag:expect]コードであることを認識しています。 –

+0

はい、それは明らかなコードです。しかし、 'expect'文はありませんので、私はOPに' $ expect_out(buffer) 'をどのように取得したのだろうと思いますか? –

答えて

0

これを試してみてください:最初の行(コマンド)の間のテキストと最後の行(プロンプト)を選択し、単語全体

より一般的に
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 
+0

の可能な複製lassignが私のシステムで動作していません。コマンドの出力だけを得る他の方法はありますか? –

関連する問題