每次笔记本一开机启动,总会连用不着且碍事的触摸板也一块启动。便想写个脚本,让电脑启动时关闭触摸板。(当然,我想更好的办法是,修改系统启动时的加载模块,让触摸板不自动加载,但是目前还不知道用这种方法怎么做。) 其实关键的代码就是一句:  
sudo modprobe -r psmouse 
 这里解释下:modprobe是加载模块的命令,-r的参数则是移除。psmouse是触摸板的模块代名。  
虽然代码很简单,但是由于涉及到sudo权限,需要输入密码。而写这个脚本的初衷是让其自动执行,不再交互。如果每次还要输入密码,便失去写这个脚本的意义了,还不如每次在终端下执行命令呢。  
网上有这么写的,但是我用了之后发现不行,论坛上也有很多人说不行,不知道为什么。 
echo "password" | sudo -S netstat -tlnp  
 也有一个也不行,是这样的: 
sudo modprobe -r psmouse<<EOF your-password EOF 
看起来很有道理,不知道为啥也不行。  
也有人说用expect,由于之前不知道这个东西,便一直没用。现在别的方法都不行了,我便试试这个方法。果然很好使,奉献出来共大家参考。后边有详细的代码解释。 
自己整理的代码如下: 
###############################################
#!/usr/bin/expect   
set timeout 30 
spawn sudo modprobe -r psmouse   
expect "password for figo:" 
send "****\r"  #这里的“****”就是你的密码   
interact 
##############################################

1. [#!/usr/bin/expect] 
  这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的bash、windows下的cmd是一类东西。   注意:这一行需要在脚本的第一行。

2. [set timeout 30] 
  基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒

3. [spawn sudo modprobe -r psmouse] 
  spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。 
  它主要的功能是给sudo modprobe运行进程加个壳,用来传递交互指令。

4. [expect "password for figo:"] 
  这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒。注意,这里password for figo:是你正常情况下输入sudo modprobe -r psmouse之后显示的让你输入密码的提示,自己复制下就行了。

5. [send "ispass\r"] 
  这里就是执行交互动作,与手工输入密码的动作等效。 
  温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下。   6. [interact] 
  执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行 
#!/usr/bin/expect #注意安装的路径,不确定 whereis expect 一下。UBUNTU12.04好像默认没有安装expect,我们只需要在终端执行以下命令就OK了: sudo apt-get install expect

ubuntu下用expect实现密码自动输入的更多相关文章

  1. ubuntu下root用户默认密码及修改方法

    [ubuntu下root用户默认密码及修改方法] 很多朋友用ubuntu,一般都是装完ubuntu系统,马上就修改root密码了,那么root用户的默认密码是多少,当忘记root用户密码时如何找回呢, ...

  2. Ubuntu下Sublime Text 3解决无法输入中文的方法

    Ubuntu下Sublime Text 3解决无法输入中文的方法_百度经验http://jingyan.baidu.com/article/f3ad7d0ff8731609c3345b3b.html ...

  3. Ubuntu下MySQL忘记root密码重置

    MySQL忘记root密码肿么办?-_-|||   这种情况虽然不是很常见,但是有时长时间没有登录系统,还真会忘记密码.这时候,如果您能以系统管理员权限登陆密码,那还是有救的.放大招,将其重置即可. ...

  4. Ubuntu下Qt(Retex)无法输入中文

    这个问题从我第一次在Ubuntu上使用Qt便困扰着我,奈何之前一直没认真去解决掉这个问题.今天作死想想,这个不可能解决不掉的.因为那么多人用Ubuntu,而且又那么多人用Qt的产品,比如Retext. ...

  5. Linux使用expect和rsync实现密码自动输入无人值守自动同步备份

    我们常用sudo,ssh.ftp命令操作服务器或者修改权限的时候都会要求输入password,但是shell脚本运行中该如何交互实现自动输入密码呢? 下面总结三种实现方法. 一.重定向:用重定向方法实 ...

  6. Ubuntu下忘记MySQL root密码解决方法

    1.忘了mysql密码,从网上找到的解决方案记录在这里. 编辑mysql的配置文件/etc/mysql/my.cnf,在[mysqld]段下加入一行“skip-grant-tables”. 2.重启服 ...

  7. ubuntu下安装搜狗输入法以及出现不能输入中文的解决办法

    1. 官网下载安装包 http://pinyin.sogou.com/linux/?r=pinyin 下载你需要的版本,这里选择64位版. 2. 进入软件中心安装 3. 修改ibus为fcitx im ...

  8. ubuntu下修改MYSQL数据库密码

    在介绍修改密码之前,先介绍一个文件/etc/MySQL/debian.cnf.其主要内容如下图: 里面有一个debian-sys-maint用户,这个用户只有Debian或Ubuntu服务器才有,所以 ...

  9. ubuntu下MySQL修改root密码的多种方法,phpmyadmin空密码无法登陆的解决方法

    phpmyadmin是默认不允许使用空密码的,所以若是在安装时没有设置密码,在登陆phpmyadmin时是个很头疼的问题 方法1是修改phpmyadmin的配置文件,这里不做推荐.. 方法2: php ...

随机推荐

  1. [置顶] 滴滴插件化VirtualAPK框架原理解析(二)之Service 管理

    在前一篇博客滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理 中VirtualAPK是如何对Activity进行管理的,本篇博客,我们继续来学习这个框架,这次我们学习的是如何 ...

  2. 原生js 保存图片到本地

    <template> <div> <!--创建一个cavas 用来存放图片--> <canvas id="cavasimg" width= ...

  3. NSPort

    NSPort是一个描述通信通道的抽象类.通信发生在两个NSPort对象之中,这两个NSPort对象通常属于不同的进程或任务.分发对象系统使用NSPort对象来返回或发送NSProtMessage对象. ...

  4. Objective C - 3 - 实现一个计算器

    代码 // // CalculatorViewController.m // Calculator // // Created by sskset on 5/28/14. // Copyright ( ...

  5. Andriod4.2 Camera 架构与实现

    1.Camera架构包括客户端和服务端,他们之间的通信采用Binder机制实现. Camera的实现主要包括本地代码和Java代码两个层次: Camera本地框架: frameworks/native ...

  6. 文件的copy

    def mycopy(src_filename, dst_filename): try: fr = open(src_filename, "rb") try: try: fw = ...

  7. PRML-Chapter3 Linear Models for Regression

    Example: Polynomial Curve Fitting The goal of regression is to predict the value of one or more cont ...

  8. sublime忽略打开工程中某些文件夹,不在搜索之列

    { "folders": [ { "follow_symlinks": true, "path": ".", " ...

  9. Typescript : 遍历Array的方法:for, forEach, every等

    方法一,for…of 这个貌似是最常用的方法,angular 2中HTML语法绑定也是要的这种语法. let someArray = [1, "string", false]; f ...

  10. python发送邮件的实例代码(支持html、图片、附件)

    转自http://www.jb51.net/article/34498.htm 第一段代码 #!/usr/bin/python# -*- coding: utf-8 -*- import emaili ...