少し仕事で悩んでしまったところなので備忘録代わりとする。
とあるツールを導入するためにサイレントインストールで導入する必要があったのだが、マニュアルにサイレントインストールで行う方法が記載されていなかったので悩んでおりました。
ShellScriptで実現できるんだろうけど、と漠然と考えていたら以下のWebサイトにどんぴしゃりの情報があったので試してみました。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9TGludXglRTMlODElQUUlRTUlQUYlQkUlRTglQTklQjElRTMlODElOEMlRTMlODIlODElRTMlODIlOTMlRTMlODElQTklRTMlODElOEYlRTMlODElOTUlRTMlODElODQlM0YlRTMlODElOUQlRTMlODIlOTMlRTMlODElQUElRTYlOTklODIlRTMlODElOTMlRTMlODElOUQlRTglODclQUElRTUlOEIlOTUlRTUlOEMlOTYlRTMlODElQTAlRUYlQkMlODEtZXhwZWN0JUU3JUI3JUE4LSZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1jbGlwPWVsbGlwc2lzJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9OWU3NTgyMTJhZjBhNjVjMGJiOGZhMGE5MGZlZjU0OTI&mark-x=142&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTcxNiZ0eHQ9JTQwaW5lMTEyNyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTMyJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9MjQxMmMwZjNiZDdjOTQxYjQ1ZDYyOTFhZDBkNzU5MWY&blend-x=142&blend-y=491&blend-mode=normal&s=083f0968dadfa631cb9ab138201a9b13)
Linuxの対話がめんどくさい?そんな時こそ自動化だ!-expect編- - Qiita
expect編以外に書くつもりは毛頭ありません。manを見てもググってもどうにも手がつけられない程度に分かりづらかったので、備忘録としてまとめます。expectって何?対マシンに於いて発生する…
#!/bin/bash
INSTSV=$HOSTNAME
BACKUPSV=backupsv
PKGPATH=/tmp/backuptool
expect -c "
set timeout 1
spawn $PKGPATH/install
expect "Do you wish to continue? [y,n] (y)"
send "yr"
expect "Enter the name of this client :"
send "$INSTSVn"
interact
こんな感じでやりたいことが実現できました。
POINT
- set timeout: 標準入力からの応答待ち時間
- spawn: 自動実行したいコマンド
- expect: 指定した文字列と標準入力を比較し、一致する文字列が出力されるまで待機する
- send: 指定した文字列を送信する
- interact: expect処理を抜ける。