今天讓我的ubuntu 64位 在宿舍接入了校園網,使用的依舊是xrgsu,xrgsu這個渣渣只有32位,木有64位,於是安裝了32位庫,安裝了xrgsu,然后為了避免每次認證都要輸入帳號和密碼,利用expect執行認證腳本,這個腳本叫做ruijie.sh(來自西電開源wiki)。
然而人的懶惰是無極限的。我的wlan0,也就是無線網卡每次開機的時候應該會是打開的,而且由於我還在其它地方連接其它類型的網絡,比如實驗室的無線網絡,於是我想再寫一個腳本,在執行ruijie.sh之前先根據wlan0是不是打開來做一點處理。
很明顯,要是wlan0打開的話,我需要關閉wlan0,用命令
ifconfig wlan0 down
就可以關閉。由於我是telnetning用戶,所以我需要在命令前面加上sudo,像這樣
sudo ifconfig wlan0 down
但是平常在tty執行的時候,會彈出"[sudo]password for telnetning:",我輸入密碼就能執行,但是在腳本中顯然不能人工輸入。順便提一下,更改sudoers文件其實也是起不到什么作用的。首先想到的就是用expect,但是,這個,或許有更簡單點的方法。
在man sudo中我們可以看到這么一段:
-S The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device. The password must be followed by a newline character.
翻譯過來就是 sudo 的 -S 選項允許從stdin讀入密碼,那這樣就好辦了。
測驗一下:
echo "password" | sudo -S visudo
用echo將我的password傳遞給sudo了,於是順利執行。
這下就好解決我的問題了:
echo “password” | ifconfig wlan0 down
比較簡單的一種方法,呵呵