ubuntu腳本自動輸入sudo密碼


轉載

linux 新開一個終端並在新終端中執行命令

 gnome-terminal -t "title-name" -- bash -c "sh ./run.sh;exec bash;"
 
 
 
 
以sudo apt-get update為例
 
1、使用echo和管道命令
 
  • #! /bin/bash
  • echo “password” | sudo -S apt-get update
 
這種方法網上說是可行,不過會將密碼顯示在屏幕上,但我在ubuntu12.04上測試不成功。
 
2、使用文本塊輸入重定向
 
  • #! /bin/bash
  • sudo -S apt-get update<<EOF
  • password
  • EOF
注意:-S 是必須的
 
3、使用expect命令
  • #! /usr/bin/expect
  • set timeout 30
  • spawn sudo apt-get update
  • expect "password for xxx:"
  • send "password\r"
  • interact
 
1. [#! /usr/bin/expect] 
  這個跟bash shell 開頭一樣,是告訴系統使用那個解釋器來解釋腳本
  注意:這一行需要在腳本的第一行。 
2. [set timeout 30] 
  設置超時時間為30秒
3. [spawn sudo apt-get update] 
  spawn是expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的。
  它主要的功能是給后面的"sudo apt-get update"運行進程加個殼,用來傳遞交互指令。 
4. [expect "password for xxx:"] 
  這里的expect也是expect的一個內部命令。
     個命令的意思是判斷上次輸出結果里是否包含“password for xxx:”的字符串,如果有則執行下一步,否則就等待一段時間后返回,這里等待時長就是前面設置的30秒 
     在ubuntu下輸入sudo命令,shell會提示
      “[sudo]password for xxx”
     這里的xxx就是你的登錄名
5. [send "password\r" ] 
  這里就是執行交互動作,與手工輸入密碼的動作等效。 
  溫馨提示: 命令字符串結尾加上“\r”,如果出現異常等待的狀態可以核查一下。 
6. [interact] 
  執行完成后保持交互狀態,把控制權從expect交會給shell,shell就可以執行sudo apt-get update。
    沒有這句的話,即使密碼已經成功輸入,也不會執行sudo命令,因為控制權還是expect手里,而expect是不能解釋apt-get update 命令的。
 
注意:ubuntu12.04默認是沒裝expect的,可以通過下面命令安裝。
sudo apt-get install expect
 
 
 
原文:
http://blog.sina.com.cn/s/blog_4da051a60101ag73.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM