chmod +静默模式+尽管有错误,如何强制退出代码0


37

是否可以执行chmod并忽略命令中的错误

示例(不存在备注file.txt来显示示例)

当我打字

chmod 777 file.txt

我在输出中收到错误

  chmod: cannot access file.txt : no such file or directory

因此,我将-f标志添加到命令中,如下所示:(为了显示这种情况,file.txt不存在)

  chmod -f 777 file.txt
  echo $?
  1

但是从示例chmod返回1

请提供错误信息,建议如何强制chmod命令给出退出代码0


为什么要反对?使用抑制任何不需要的输出,2>/dev/nullset -e在脚本中使用。
ott

Answers:


47

请提供错误信息,建议如何强制chmod命令给出退出代码0

chmod -f 777 file.txt || :

:如果chmod失败,将执行,即null命令。由于null命令不执行任何操作但总是成功,因此您将看到退出代码0。


25
等效的,但一个偶然的用户更可读的是使用chmod -f 777 file.txt || true
猎户

2
@orion取决于。如果熟悉的话,:可读性也一样。
devnull 2014年

2
但是,如果我们编写了让菜鸟可以阅读的更具可读性的代码,那么我们将如何保持工作呢?
Nick T

1
这里的厨师开发人员,只是提供了一些关键词来帮助其他遇到我同样问题的人。shell_out!(cmd +'|| true')是一个救生员,当您试图与安装保持幂等并且需要忽略shell_out!编译错误。
JackChance

53

chmod -f 777 file.txt || true

因为它是一个OR,所以如果其中一条语句返回true,则返回值为true。这导致退出状态为零。


3
我添加了此答案,作为促进练习编写可读代码的替代方法。
2015年

2
||如果chmod成功,将不会执行的右分支...并不是说这里的计算差异很大。
dhag 2015年

谢谢你 我简直不敢相信。:)用更正进行编辑。
格里2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.