chmod + 静默模式 + 如何在出现错误的情况下强制退出代码 0

52 shell chmod shell-script error-handling

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

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

当我打字

chmod 777 file.txt
Run Code Online (Sandbox Code Playgroud)

我在输出上出错

  chmod: cannot access file.txt : no such file or directory
Run Code Online (Sandbox Code Playgroud)

所以我将 -f 标志添加到命令中,如下所示:( file.txt 不存在以显示案例)

  chmod -f 777 file.txt
  echo $?
  1
Run Code Online (Sandbox Code Playgroud)

但是从示例 chmod 返回 1

请建议如何强制 chmod 命令在出现错误的情况下给出退出代码 0

Ger*_*rry 68

chmod -f 777 file.txt || true

由于它是一个 OR,如果其中一个语句返回 true,则返回 true。这导致退出状态为零。

  • 我添加了这个答案作为促进编写可读代码的练习的替代方法。 (4认同)
  • 如果 `chmod` 成功,`||` 的右分支将不会被执行......并不是说它在这里产生很大的计算差异。 (3认同)

dev*_*ull 63

请建议如何强制 chmod 命令在出现错误的情况下给出退出代码 0

chmod -f 777 file.txt || :
Run Code Online (Sandbox Code Playgroud)

:如果chmod失败,这将执行,即空命令。由于 null 命令什么都不做但总是成功,您将看到退出代码 0。

  • 等效的,但对于普通用户更易读的是使用 `chmod -f 777 file.txt || 真的` (33认同)
  • 但是,如果我们编写了新手可以阅读的更具可读性的代码,我们将如何保住我们的工作? (3认同)
  • @orion 视情况而定。如果熟悉,那么`:` 似乎同样具有可读性。 (2认同)
  • 厨师开发人员在这里,只是删除一些关键词来帮助遇到同样问题的其他人。shell_out!(cmd+'|| true') 当您试图对安装进行幂等并且需要忽略 shell_out 时,它是一个救星!编译错误。 (2认同)

Era*_*oni 7

我一直爱

 chmod -f 777 file.txt || exit 0
Run Code Online (Sandbox Code Playgroud)

  • 这使得脚本在 chmod 不成功时停止。问题是让脚本在出现问题时继续运行(忽略错误)。 (6认同)