Open10

expect

神田 祐介神田 祐介
#!/usr/bin/sh

expect -c "
spawn sh ./target-sample.sh
send \"Y\n\"
expect
"

ただexpect試すだけ。無条件にYを送る

神田 祐介神田 祐介

条件をつけてその応答要求がきたら返す。

#!/usr/bin/sh
  
expect -c "
spawn sh ./target-sample.sh
expect \"ok? (y/N)\"
send \"Y\n\"
expect
"
神田 祐介神田 祐介

応答が2回必要なshにする。

#!/bin/sh

read -p "ok? (y/N): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

echo "tudukimadekita"

read -p "ok2? (y/N): " yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac

echo "tudukimadekita2"
神田 祐介神田 祐介

timeoutをセットしなくてもデフォルトがあるらしいタイムアウトする。

神田 祐介神田 祐介
#!/usr/bin/sh

expect -c "
spawn sh ./target-sample.sh
send \"Y\n\"
send \"Y\n\"
expect
"

sendだけ入れると先行入力している?

sh expect-sample.sh 
spawn sh ./target-sample.sh
Y
Y
ok? (y/N): tudukimadekita
ok? (y/N): tudukimadekita2

→おそらく先行入力であっている。

応答する条件を指定

#!/usr/bin/sh

expect -c "
spawn sh ./target-sample.sh
expect \"ok? (y/N)\"
send \"Y\n\"
expect \"ok? (y/N)\"
send \"Y\n\"
expect
"
sh expect-sample.sh 
spawn sh ./target-sample.sh
ok? (y/N): Y
tudukimadekita
ok? (y/N): Y
tudukimadekita2
神田 祐介神田 祐介

apt install -y wkhtmltopdfの応答メモ(これの為にexpect使っているので)

The layout of keyboards varies per country, with some countries having multiple common layouts. Please select the country of origin for the keyboard of this
computer.

[More]55 (Japanese)
Country of origin for the keyboard: 55 (Japanese)

Please select the layout matching the keyboard for this machine.

Keyboard layout: 1 (Japanese)

神田 祐介神田 祐介

失敗例

#!/usr/bin/sh
  
expect -c "
set timeout 300000
spawn apt-get install -y wkhtmltopdf

expect \"\[More\]\"
send \"55\n\"
expect \"Country of origin for the keyboard:\"
send \"55\n\"

expect \"\Keyboard layout:\"
send \"1\n\"

expect
"

反応しなかった