コマンド操作していて対話式でやりとりするのが面倒なので、
自動化させるためにちょっと触ってみた。
1. expectコマンドとは
コマンドの返答を識別して、次の入力を自動的に対応してくれるもの。
シェル内部に組み込むことで、いろいろ自動化できて楽になる。
expectコマンドがインストールされていない場合は、
下記のコマンドを事項してインストール必要。
yum install expect
2. 実際にどんな感じに動くかためしてみた
対話式のコマンドをスクリプト化する方法
↑のサイトを参考に動かしてみることにします。
expect -c "
spawn [実行したいコマンド]
expect [コマンドの返答]
send -- [次のコマンド]
"
★PW変更の場合
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | grep hoge
[root@localhost ~]#
[root@localhost ~]# useradd hoge
[root@localhost ~]#
[root@localhost ~]# cat /etc/passwd | grep hoge
hoge:x:502:502::/home/hoge:/bin/bash
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# passwd hoge
Changing password for user hoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# cat passwd-test.sh
# !/bin/sh
export LANG=C
pw="hom7fak8eUd2"
expect -c "
spawn passwd hoge
expect \"New password:\"
send -- \"${pw}\n\"
expect \"Retype new password:\"
send -- \"${pw}\n\"
expect \"passwd: all authentication tokens updated successfully.\"
send -- \"exit\n\"
"
[root@localhost ~]#
[root@localhost ~]# ./passwd-test.sh;echo $?
spawn passwd hoge
Changing password for user hoge.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.0
[root@localhost ~]#
[root@localhost ~]# exit
logout
[user@localhost ~]$