这是一个老问题,但这里没有一个答案讨论在Debian包处理脚本中使用 set -e aka set -o errexit . 根据Debian政策,这些脚本中必须使用此选项;意图显然是为了避免任何未处理错误情况的可能性 .

这在实践中意味着您必须了解在什么条件下运行的命令可能会返回错误,并明确地处理每个错误 .

常见的问题是例如 diff (当存在差异时返回错误)和 grep (当没有匹配时返回错误) . 您可以通过显式处理来避免错误:

diff this that ||

echo "$0: there was a difference" >&2

grep cat food ||

echo "$0: no cat in the food" >&2

(另请注意我们如何注意在消息中包含当前脚本的名称,以及将诊断消息写入标准错误而不是标准输出 . )

如果没有真正必要或有用的显式处理,请明确地不做任何事情:

diff this that || true

grep cat food || :

(使用shell的 : no-op命令有点模糊,但很常见 . )

重申一下,

something || other

是简写

if something; then

: nothing

else

other

fi

即,当且仅当 something 失败时,我们明确地说 other 应该运行 . longhand if (以及其他shell流控制语句,如 while , until )也是处理错误的有效方法(事实上,如果不是这样,带有 set -e 的shell脚本永远不会包含流控制语句!)

而且,只是为了明确,在没有像这样的处理程序的情况下,如果 diff 找到差异,或者 grep 找不到匹配项, set -e 将导致整个脚本立即失败并显示错误 .

另一方面,有些命令不希望他们这样做 . 通常有问题的命令是 find (退出状态不反映文件是否实际被发现)和 sed (退出状态不会显示脚本是否接收到任何输入或实际上是否成功执行了任何命令) . 在某些情况下,一个简单的保护是管道输出一个命令,如果没有输出就会尖叫:

find things | grep .

sed -e 's/o/me/' stuff | grep ^

应该注意,管道的退出状态是该管道中最后一个命令的退出状态 . 所以上面的命令实际上完全掩盖了 find 和 sed 的状态,只告诉你 grep 是否最终成功 .

(当然,Bash有 set -o pipefail ;但Debian软件包脚本不能使用Bash功能 . 该策略坚决要求对这些脚本使用POSIX sh ,但情况并非总是这样 . )

在许多情况下,这是在防御性编码时要单独注意的事情 . 有时您必须例如浏览一个临时文件,这样你就可以看到生成该输出的命令是否成功完成,即使成语和方便还会指导你使用shell管道 .

java脚本含义_set -e在bash脚本中的含义是什么?相关推荐

  1. linux编写脚本读取txt文件,用bash脚本或者批处理 bat脚本 读取一个目录下.txt文件第一行内容存放到新文件a.txt...

    起因:我把cmd 控制台说成了dos! 发展:人类生气了,跟我扯了一堆 dos 还有什么玩意儿,在我第二次还说那个是dos界面以后:( 后续:人类要我写 批处理bat 还有linux bash 脚本去 ...

  2. bash脚本 文件_如何使用Bash脚本来管理从AWS S3存储桶下载和查看文件

    bash脚本 文件 As you can read in this article, I recently had some trouble with my email server and deci ...

  3. linux脚本算术函数,Linux基础之bash脚本编程初级-变量与算术运算

    什么是变量? 变量最初来源于数学,指的是非固定的值可变化的数通常用拉丁字母表示.在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化.它指的是变量名+所指向的内存空间. 以下实验环境均在Cen ...

  4. Linux脚本点空格,linux – 在bash脚本中使用引号和空格的awk

    我在接收到的snmp陷阱中的bash变量集中输出以下内容: echo $var Nov 27 16:20:34 witness logger: trap: vars: DISMAN-EVENT-MIB ...

  5. 计算机检索中各符号表示含义,文献检索中符号的含义这些符号在文献检索中的含义:AND、 OR、 NOT、 (W)、 TI、 W/s、 AU、 LENG...

    共回答了19个问题采纳率:84.2% 逻辑或(+,OR):表达检索词间的并列关系.可扩大检索范围,提高查全率.如:A+B,表明结果中含有A或B都为检索命中 逻辑与(*,AND):表达检索词间的交叉关系 ...

  6. Bash脚本的空格和“期待一元表达式”错误

    很少自己写Bash脚本,一写就出现了一些奇怪的问题,主要还是对Bash脚本的语法不够熟悉,毕竟很少使用. 当做记录一下吧,今天因为空格导致的一些脚本问题: 1.Bash脚本中的赋值符号"=& ...

  7. 第四组视频:在bash脚本中使用脚本选项

    马哥教育(http://www.magedu.com)在bash脚本中使用脚本选项.本视频是我们上课过程的实际记录.下载地址:    http://down.51cto.com/data/414002 ...

  8. Bash脚本获取自身完整路径的可靠方法

    本文翻译自:Reliable way for a Bash script to get the full path to itself [duplicate] This question alread ...

  9. 从脚本本身获取Bash脚本的源目录

    如何获取其中的目录路径的Bash脚本所在,该脚本里面 ? 例如,假设我要使用Bash脚本作为另一个应用程序的启动器. 我想将工作目录更改为Bash脚本所在的目录,以便可以对该目录中的文件进行操作,如下 ...

最新文章

  1. Java项目:家庭理财系统(java+SSM+JSP+Tomcat8+Mysql)
  2. dedecms网站文章内容按自定义排序的方法
  3. Windows Mobile Topics at TechEd 2008
  4. Linux基础第五课——用户管理
  5. 远程拷贝代码 指定端口
  6. 概括ADO.NET数据库连接的所有形式(基础)
  7. 小程序购物车下架商品实时显示,只为更好用户体验!
  8. 千山独行-一个人的创业路(连载八)
  9. 一个用python写的从数字高程格式文件(DEM)中提取水系的模块
  10. 软件需求分析模板2020-11-04
  11. ijkplayer android端jni层调试
  12. 计算机网络中的www服务,计算机网络基础练习题01
  13. 百度网盘电脑登录二维码加载不出来解决方法
  14. iOS开发 动画(Animation)图片360度不停旋转
  15. 实现虚拟机和主机之间的文件传输
  16. 若依部署css样式失效时
  17. git.exe pull -v --progress “origin“ fatal: unable to access ‘https://github.com/xxxxrm_foll
  18. SMM--Spring
  19. 普元mobile_普元Mobile上架AppStore被拒合集(持续更新)
  20. 一个屌丝程序员的青春(二九四)

热门文章

  1. 【华为推荐】基于反事实学习的推荐系统研究.pdf(附pdf下载链接)
  2. 只怪自己当时年纪太小,一心只看那只泼猴了
  3. 【采访】腾讯社交广告高校算法大赛决赛第二周最大进步队伍——拔萝卜比赛经验及心得分享
  4. 预训练新范式!为什么Prompt会更有效?
  5. 阿里系 java_阿里系六大开源项目,你知道几个?
  6. png文件合并_程序员学习之在Python中使用PDF:阅读、旋转、合并和拆分
  7. python合并多个excel代码_Python脚本合并多个Excel文件
  8. Leetcode每日一题:242.有效的字母异位词
  9. 吴恩达深度学习CNN作业:Convolutional Neural Networks: Application
  10. 使用Timer的缺陷