• shell (check return of each line)(PIPESTATUS[@])and sudoer


    shell result from cmdline

    echo $?

    if 0 then success ;else failure

    (shell 执行每部返回值,rm -rf 错误,打包不能覆盖)

    我们知道,linux命令行上一个命令的退出码放在了$?环境变变中,但是,如果这个命令是一串管道符连接和多个命令,怎么知道每个命令的退出码?你可以 使用 PIPESTATUS环境变量。比如这个测试:true | false | true; echo "${PIPESTATUS[@]}"



    解决sudo: sorry, you must have a tty to run sudo
     
    前几天遇到一个问题,在一个终端中调用另一个shell,始终是无法执行的,后来捕捉到报错信息为sudo: sorry, you must have a tty to run sudo,后来,在网上了解到可以如下解决:
    1. 编辑 /etc/sudoers
     
      1)Defaults    requiretty,修改为 #Defaults    requiretty,表示不需要控制终端。
     
      2)Defaults    requiretty,修改为 Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。
     
           如果修改为 Defaults:%nobody !requiretty,表示仅 nobody 组不需要控制终端。
     
    其实只要注释掉)Defaults    requiretty 那个就可以了。表示在执行的时候不打开终端。但是,有的shell必须要有终端才可以执行。这样显然是不行的。后来,又找到一片文章才搞定。下面为抄录的,仅为记录以后使用。
     
    有些程序/脚本可能在没有控制终端的环境下上执行(如系统启动服务时, Daemon,
    或者是setsid启动的程序等) 但可能这个程序需要控制终端, 这这么办呢?
    如我们的例子: 我们在linux启动时启动一个服务, 可是中间有个程序(旧的systemtap)使用了sudo
    但sudo需要控制终端(当然可以通过修改sudo的配置文件, 但这样很对用户不友好啊)
    例子: (setsid 启动的程序会失去控制终端)
    # setsid sudo ls
    sudo: sorry, you must have a tty to run sudo
    (如果你的系统没有输出这句话, 那就是你的系统的sudo配置文件允许sudo可以在这个,
    请确保已经设置了Defaults    requiretty)
    没有控制中断的时候, 打开控制终端是这样的效果:
    # setsid head -c 0 /dev/tty
    head: cannot open `/dev/tty' for reading: No such device or address
    为了解决这个问题, 所以应该使用能创建(伪)控制终端的程序来启动你的程序如: script, expect
    如:
    # setsid script -c "sudo ls" /dev/null
    或:
    # setsid expect -c 'spawn sudo ls; expect'
    #打开控制终端成功:
    # setsid script -c 'head -c 0 /dev/tty' /dev/null 
    # setsid expect -c 'spawn head -c 0 /dev/tty; expect'
    不过 setsid 跟 script 组合使用有着奇怪的bug, 我这段时间非常的depression,
    这样对script, expect来说, 都是大材小用了
  • 相关阅读:
    2019-2020-1 20175312 20175333 实验五 通讯协议设计
    2019-2020-1 20175312 20175333 实验四 外设驱动程序设计
    2019-2020-1 20175312 20175333 实验三 并发程序
    2019-2020-1 20175312 20175321 20175333 实验二 固件程序设计
    2019-2020-1 20175312 20175321 20175333 实验一 开发环境的熟悉
    2018-2019-1 20175312 《信息安全系统设计基础》第3周学习总结
    2019-2020-1 20175312 《信息安全系统设计基础》第2周学习总结
    2019-2020-1 20175312 《信息安全系统设计基础》第1周学习总结
    20175312 2018-2019-2 实验五 网络编程与安全 实验报告
    20175312 2018-2019-2 实验四 Android程序设计 实验报告
  • 原文地址:https://www.cnblogs.com/SZLLQ2000/p/6210823.html
Copyright © 2020-2023  润新知