如何让 expect 和 bash 共存

在编写脚本时,为了安全地在主机间执行命令,很多人都用上了 expect 命令(其实也算不上十分安全,但总比打通 ssh 免密码登录要好点)。在编写脚本中, #!/usr/bin/expect#!/bin/bash 无法同时定义,全程用 expect 又觉得无比麻烦。所以很多操作都需要写两个脚本,一个 expect 用于远程操作,一个 bash 用于过滤信息及进行后续操作。

其实使用一个 expect 参数就可以让两种命令共存了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[nagios@gxuweg3app01 my]$ vi test.sh 

#!/bin/bash
expect -c "set timeout 2
spawn ssh pausr01@gxuweg3app08
expect \"password:\"
send \"Finder\r\"
expect \"]*\"
send \"echo good!\r\"
expect \"]*\"
send \"exit\r\"
"|grep good
~
"test.sh" 10L, 199C written

[nagios@gxuweg3app01 my]$ ./test.sh
pausr01@gxuweg3app08:/uniiof/users/pausr01>echo good!
good!
[nagios@gxuweg3app01 my]$

打完收工!