LoginSignup
38
36

More than 5 years have passed since last update.

expectコマンドを使ったみた

Posted at

コマンド操作していて対話式でやりとりするのが面倒なので、
自動化させるためにちょっと触ってみた。

-

1. expectコマンドとは

コマンドの返答を識別して、次の入力を自動的に対応してくれるもの。
シェル内部に組み込むことで、いろいろ自動化できて楽になる。

expectコマンドがインストールされていない場合は、
下記のコマンドを事項してインストール必要。

yum install expect

-

2. 実際にどんな感じに動くかためしてみた

対話式のコマンドをスクリプト化する方法
↑のサイトを参考に動かしてみることにします。

expect -c "
spawn [実行したいコマンド]
expect [コマンドの返答]
send -- [次のコマンド]
"

検証用に仮想マシンを作成しました。
kobito.1451455401.948283.png

★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 ~]$

38
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
36