Linux中expect的使用以及timeout参数的设置
先上一段expect的shell代码(连接一个数据库执行命令),照骡子画马大家总该会吧:
/usr/bin/expect <<!
set timeout 600
spawn /home/gis/bin-install/pgsql11.6/bin/psql -h 172.30.190.54 -p 5432 -d gis -U gis
expect "*Password*"
send "gis1001A!\n"
expect "gis=#"
send "delete from tmp_dim_pub_cell;delete from tmp_dim_pub_cell_1; \n"
expect "*gis*"
send "copy tmp_dim_pub_cell from '/home/gis/dim_pub_cell.csv' delimiter '|';\n"
expect "*COPY*"
send "\n"
expect "*gis*"
send "insert into tmp_dim_pub_cell_1 select CELL_ID,CELL_ID_10,
LAC_ID_16,MAINTAIN_CELL_ID from tmp_dim_pub_cell;\n"
expect "*gis*"
send "COPY (select * from tmp_dim_pub_cell_1) TO '/home/gis/dim_pub_cell_bak.csv' delimiter '|';\n"
expect "*COPY*"
send "\n"
expect "*gis*"
send "exit \n"
interact
expect eof
!
- spawn表示新建一个进程,相当于执行一个linux命令。
- expect表示从进程中接受一个字符串。
- send表示向进程发送一个字符串
- timeout表示超时时间,单位为秒(s),当expect没有收到符合条件的字符串时就会一直等待,当超过timeout设置的时间时就会自动跳过expect往下执行。
所以要注意当一条命令可能执行的时间很长时,timeout最好设置的大一点,避免命令没有执行完就跳过执行后续代码。