根据上一个命令的结果运行命令(整个语句不会失败)

根据上一个命令的结果运行命令(整个语句不会失败)

我想做这样的事情:

gatekeeper.sh && <script>

gatekeeper.sh根据某些条件返回 0 或 1 来确定是否执行 <script> - 到目前为止,这是有效的,但是:

  1. 如果 Gatekeeper.sh 成功但 <script> 没有成功,则整个命令应该失败(退出状态!= 0)
  2. 整个命令应该不是如果gatekeeper.sh失败(并且第二个命令未执行),则失败
  3. <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"

相关内容