如何检测Bash Shell命令后面是否跟随逻辑运算符&&(AND)或||(OR)?

4
我喜欢为我常用的构建命令取一个简短的名称。我也喜欢在命令完成时使用notify-send通知我,以便我可以在等待期间进行多任务处理而不必看着终端。
现在,如果我链接这些命令,我希望它们不会发出通知。例如:
  alias b='command and parameters for my build; notify-send'
  alias b2='command and parameters for a second type of build; notify send'

  $ b
  // I am notified when it completes, just once.

  $ b && b2
  // Today, I am notified twice, when b completes and when b2 does.
  // I would like to only be notified when they all complete.
  // (and I would rather not type b && b2 && notify-send)

那么,在bash中,命令能否检测到它们是否跟着&&||


理论上,这可以在bash中实现--它跟踪已检查和未检查命令之间的区别,以便于set -e的目的;可以发送一个向上游公开此标志状态的补丁;但是,目前无法访问。 - Charles Duffy
话虽如此,if foo 也会设置 checked 标志,因此这可能并不完全符合您的要求(如果您确切地只想在 &&|| 上触发)。 - Charles Duffy
1个回答

4
不可以。通常的做法是将通知从你的命令中分离出来:
b && b2; notify-result $?

如果你将bb2实现为Shell函数而不是外部命令,那么你可以进行一些内省——查看BASH_SOURCE数组以检查与代码调用相关的堆栈帧,但这种方法极其脆弱,并且绝不是一种好的做法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接