神奇的expect
想寫自動化腳本的時候,遇到需要交互的,如ssh,scp,就束手無策,直到我知道了expect。
expect 有一系列expect-send對組成,就像聊天一樣。
expect A send B
expect C send D
先來個例子
#!/usr/bin/expect
set timeout 5
spawn ssh 192.168.2.38
expect "password" {send "slk\n"}
expect "Last login" {send " ls -l\n"}
expect eof
exit
/usr/bin/expect是指明該腳本要調用expect
set timeout 5,設置每個expect等待的時間,-1則為永不超時,在expect scp xxx xxx 的時候很好用,時間如果設太短,還沒傳完,expect就返回了。
spawn 創建一個進程,執行ssh 192.168.2.38命令,然后下面就是expect 和send的命令對了。
expect "password" {send "slk\n"}, 當出現“expect"的時候,發送,"slk\n",必須要加\n,就和我們平時自己輸秘密最后要加個\n一樣。
expect可以不止一個,所以下面可以繼續expect和send。如果要執行的命令有很多,可以不寫那么多expect send,直接把命令寫在另一個腳本里,expect "Last login" {send " ./do.sh\n"} 就好了,expect是為交互而存在的,在不需要交互的地方調用expect是浪費自己的時間。
?
總結
- 上一篇: 各主板黑苹果dsdt补丁_台式机微星(M
- 下一篇: 2022年整理LeetCode最新刷题攻