zoukankan      html  css  js  c++  java
  • 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 "
    • 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 " ] 
      这里就是执行交互动作,与手工输入密码的动作等效。 
      温馨提示: 命令字符串结尾加上“ ”,如果出现异常等待的状态可以核查一下。 
    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
  • 相关阅读:
    【内核】linux内核启动流程详细分析【转】
    【Linux】Linux基本命令扫盲【转】
    【Linux高级驱动】linux设备驱动模型之平台设备驱动机制【转】
    【Git】Git与GitHub 入门【转】
    usbnet驱动深入分析-usb虚拟网卡host端【转】
    USB设备被识别流程【转】
    LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
    公积金条例久拖不改是谁在博弈?
    Android事件机制全然解析
    《Java并发编程实战》第二章 线程安全性 读书笔记
  • 原文地址:https://www.cnblogs.com/wal1317-59/p/12693789.html
Copyright © 2011-2022 走看看