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来说, 都是大材小用了

转载于:https://www.cnblogs.com/SZLLQ2000/p/6210823.html

shell (check return of each line)(PIPESTATUS[@])and sudoer相关推荐

  1. paly 框架Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.

    今天使用play框架启动项目时候,直接Debug As 执行Demo会报错: ERROR: Cannot load this JVM TI agent twice, check your Java c ...

  2. SAP ABAP STOP,EXIT,CHECK,RETURN

    Stop 命令 使用该命令的程序位置 INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中 处理说明 1. 当在INITIAL ...

  3. 《Linux命令行与shell脚本大全》笔记

    初识Linux Shell 什么是Linux Linux可划分为以下四部分: Linux内核 GNU工具 图形化桌面环境 应用软件 深入探究Linux内核 内核主要负责以下四种功能: 系统内存管理 软 ...

  4. 如何进行shell脚本正确性测试

    博客已迁移,新地址 ---------------------------------------------------------------------------------------- 在 ...

  5. java script check radio

    java script check radio <script> function check(){ ??? for (var i=0;i<document.form1.elemen ...

  6. Shell脚本基础及常用的四剑客

    Shell脚本基础及应用 一.shell变量 二.判断语句 if语句 if语句实战 三.循环语句 for循环 while循环 until循环 四.选择语句 case语句 五.四剑客 grep sed ...

  7. shell脚本编程之函数

    技术交流QQ群:1027579432,欢迎你的加入! 1.基本的脚本函数 脚本函数出现的目的:为了解决大型处理过程中,需要将相同的重复代码封装起来,提高代码的复用性. 函数是一个脚本代码块,你可以为其 ...

  8. 常见的shell实例

    1.从磁盘使用统计中排除部分文件 du  --exclude "*.iso" dir 2.找出指定目录中最大的10个文件 find -type f -exec du -k {} \ ...

  9. Linux基础:Shell脚本学习

    一.shell简介 Shell是用户和Unix/Linux内核沟通的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行 ...

最新文章

  1. 女朋友啥时候怒了?Keras识别面部表情挽救你的膝盖
  2. 干货丨机器学习和深度学习概念入门
  3. 编程之美2.1 求二进制中1的个数
  4. 八皇后问题的Java递归算法
  5. java xml 节点路径,SelectSingleNode使用XPath为已知良好的xml节点路径返回null
  6. JAVA通过HTTPS发送POST请求的方法
  7. EMC之对象参考1 -- 对象基本知识
  8. Android 得到函数耗时多少的方法
  9. POJ 3264:Balanced Lineup(RMQ模板题)
  10. Spket,eclipse下安装Spket插件,格式化js
  11. 台式计算机显卡驱动位置,惠普台式电脑怎么安装显卡驱动
  12. 如何生成随机验证码图片
  13. 利用npm bin创建可执行命令实现项目代码规范自动化
  14. 多线程支持断点续传的文件传输--(摘自大富翁)
  15. lvs+keepalived+ipvsadm 完整搭建笔记
  16. HRBUST1151-魔女
  17. 渗透一个最近很火的闲鱼钓鱼网站
  18. 谷歌小恐龙-有网也能玩儿
  19. Ubuntu16.04下使用kalibr标定intel RealSense D435i imu+双目
  20. 名字生成器 php,php生成器对象

热门文章

  1. 【Linux系统编程】可重入和不可重入函数
  2. 【Linux网络编程】TCP
  3. 北邮计算机学院崔哲域,邂逅北邮 是最美的期待—北京邮电大学2019级本科生开学典礼采访纪实...
  4. oracle最新版本是多少_运维日记|关于Oracle的补丁你需要知道的事
  5. python编写程序输出诗句_Python学习笔记(一)-- print语句
  6. 回复群邮件导致邮件服务器,电子邮件逐个发-邮件群发软件-使用手册
  7. C++11学习笔记-----互斥量以及条件变量的使用
  8. 数据结构-----二叉树,树,森林之间的转换
  9. file是c语言自带的数据类型吗_C语言中基本的数据类型包括
  10. [Sensor]--BMI160-加速度计、陀螺仪传感器