今天要開發一個定時任務,然後加入cron列表中。但是有個問題擺在眼前,腳本的執行中需要輸入數據庫密碼:
mysql -u root -p << SQL use db; set names utf8; `cat task.sql` SQL
運行上述代碼後,會提示:
Enter password:
經過搜索,發現expect可以幫助我們完成這件事情:
將上述代碼保存到一個文件中:db.sh,並且編寫如下代碼:
#!/usr/bin/expect -f spawn db.sh expect "Enter password: " send -- "password\n" interact那麼我們運行之後,就會進入數據庫交互接口。
第一行指示了這個腳本要用哪個程序來運行;
第二行是重點,在EXPECT下啟動了一個我們要執行的程序;
第三行也是重點,我們要告訴expect,當什麼信息出現時需要expect幫助我們完成交互;
第四行就是出現輸入密碼的提示時,要發送的內容;
第五行的意思是保持交互,不要退出。如果沒有這一句,腳本成功登錄數據庫後,會立即退出。