トップページ > コンテンツ > コンピュータ関連その他 > UNIXコマンド > シェルスクリプト > シェルスクリプト文法 > シェルスクリプト駄文 > expect

以下のような形で、コマンドを記載していくことで、
入力待ちコマンドに対してコマンド実行できる。

expect -c "

###################
#タイムアウト設定部分
###################
set timeout 60                              #タイムアウト時間をセット

###################
#入力待ち部分
###################
spawn コマンド                   #実行するコマンドを記載
 
expect {
   ¥"コマンド実行時の期待応答¥"    #マシンからの応答文字
   {
      send -- ¥"送信文字列¥n¥"       #値の送信(Enterまで渡すには¥nを末尾につける)
      exp_continue                       #期待応答が来なかった場合にexpect内分岐のパターンマッチを続けるの意味
   }
   timeout {                                #タイムアウト時の処理
     exit 1
   }
 }

###################
#終了部分
###################
<手動実行の場合>
   interact                                #通常の通信に戻るの意味

<cron実行の場合>
  expect eof                            #実行したプロセスが終わるのを待つの意味
  exit                                     #終了する

<コマンドの実行結果が欲しい場合>
  expect eof
  catch wait result                  #spawnで実行したコマンド結果を待つ
  exit [ lindex $result 3 ]         #spawnで実行したコマンド結果が[lindex $result 数値]に入る。
                                           #数値はリストから何番目の要素を取り出すかを指定。
                                          #3はステータスコード。左はコマンド実行結果のステータスで終了するの意味
                #実行結果を変数に結果を格納する場合は、set 変数名 [ lindex $result 数値]のようにすれば良い。
 "
最終更新:2020年11月30日 21:26