LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1533|回复: 2

有关set -e和子shell的问题

[复制链接]
发表于 2010-9-1 16:13:15 | 显示全部楼层 |阅读模式
echo "ada" && (set -e; echo "yes"; cat nothing; echo "no")
echo "ret: $?"

echo "ada" && (set -e; echo "yes"; cat nothing; echo "no") && echo "123123"
echo "ret: $?"

子shell的执行结果不一致,第一例不会打印 no, 第二例会打印no,
返回值也不同。

这是为什么呢?
发表于 2010-9-3 23:28:47 | 显示全部楼层
-e      Exit immediately if a pipeline (which may  consist  of  a  single
                      simple  command),  a subshell command enclosed in parentheses, or
                      one of the commands executed as part of a command  list  enclosed
                      by braces (see SHELL GRAMMAR above) exits with a non-zero status.
                      [color="Red"]The shell does not exit if the command that fails is part of  the
                      command list immediately following a while or until keyword, part
                      of the test following the if or elif reserved words, part of  any
                      command  executed in a && or ⎪⎪ list except the command following
                      the final && or ⎪⎪, any command in a pipeline but the last, or if
                      the  command's  return value is being inverted with !.  A trap on
                      ERR, if set, is executed before the  shell  exits.   This  option
                      applies  to  the  shell environment and each subshell environment
                      separately (see COMMAND EXECUTION  ENVIRONMENT  above),  and  may
                      cause  subshells to exit before executing all the commands in the
                      subshell.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-13 00:11:34 | 显示全部楼层
Thank you very much.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表