【发布时间】:2018-10-03 13:04:16
【问题描述】:
我在 Bash 脚本中有这样的逻辑:
运行一些东西;
如果失败,请打印一些内容并停止;
如果没有,请运行其他内容。
所有这些都在ssh 会话中运行。
如果我使用$? 和if / else,这可能是微不足道的。
但由于脚本的可维护性,我正在寻找一些优雅的 2 行解决方案。
这是我目前所拥有的
ssh ... '
ls attributes/*'$CONF_FILE'.rb || ls -l attributes/ && exit 1;
'$EDITOR' attributes/*'$CONF_FILE'.rb '$PART_VER';'
但是,无论如何都会退出。所以我尝试了:
ssh ... '
ls attributes/*'$CONF_FILE'.rb || (ls -l attributes/ && exit 1);
'$EDITOR' attributes/*'$CONF_FILE'.rb '$PART_VER';'
但是,exit 只退出子shell。还有exiting a script from within a subshell is not elegant。
有简单的两行解决方案吗?也许其他运算符优先?
【问题讨论】:
-
简洁性和可维护性是 shell 中的对立力量。简洁的代码可能会为了简洁而牺牲正确性,从而隐藏更多的错误。遵循最佳实践的方法显然是正确的(当然,对于与相关最佳实践习语相关的人来说)并不简洁。
-
您是否正在运行
ls只是为了查看配置文件是否已经存在?有更好的方法来做到这一点。
标签: bash operators exit logical-operators