今天让我的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
比较简单的一种方法,呵呵