我想做这样的事情:
gatekeeper.sh && <script>
gatekeeper.sh
根据某些条件返回 0 或 1 来确定是否执行 <script> - 到目前为止,这是有效的,但是:
- 如果 Gatekeeper.sh 成功但 <script> 没有成功,则整个命令应该失败(退出状态!= 0)
- 整个命令应该不是如果gatekeeper.sh失败(并且第二个命令未执行),则失败
- <script> 不应更改
如果可能的话,我希望语法尽可能简短,以提高可读性
答案1
如果可能的话,我希望语法尽可能简短,以提高可读性
在这种情况下,我认为“尽可能短”≠“更好的可读性”。即使我能想到一种语法&&
和公司来满足您的要求,我怀疑也很难一眼看出代码作者的意图。
我认为在这种情况下,为了清楚起见,您需要额外的声明:
if gatekeeper.sh; then
<script>
fi
在某种程度上,最具可读性的代码可能受到业务逻辑的影响。什么构造可以最透明地将逻辑意图转化为代码?
答案2
将我的方法提出来供讨论。我知道评估是邪恶的(有时)但我相信正在执行的命令。
网守.sh
#!/usr/bin/bash
if [[ <condition> ]]; then
eval "$1"
exit "$?"
fi
用法:gatekeeper.sh "<command>"
答案3
gatekeeper.sh
您可以捕获变量中的退出状态并稍后在变量中使用它exit
(或者return
如果它是函数而不是脚本)
#!/bin/sh
gatekeeper.sh
status=$?
[ "$status" != 0 ] && <script>
exit "$status"