BASH命令成功或错误完成后执行另一条命令

时间:2020-01-10 11:11:54

标签: bash

我想执行以下命令ruby do_task.rb && say "done"

问题在于,如果命令失败,它什么也不会说。如何解决它,以便它总是说出些什么(我不介意它说“失败”而不是“完成”,或者总是说“完成”)。

3 个答案:

答案 0 :(得分:6)

只需用分号替换&&;

ruby do_task.rb;say "done"

答案 1 :(得分:4)

简单地:

(ruby do_task.rb && say "done") || (say "fail")

或者如@LéaGris所建议,以避免产生子外壳,

{ ruby do_task.rb && say "done";}||say "fail"

ruby do_task.rb; say "end"

答案 2 :(得分:2)

另一种使用带有返回代码索引的消息数组(需要外壳的数组)的方法。

message=('success' 'failure')
ruby do_task.rb
say "${message[$?]}"

还请注意,如果ruby do_task.rb的返回码大于1,则需要一个数组,其中每个返回码的索引处均带有消息。

要使用上述方法维护二进制文件的成功或失败:

message=('success' 'failure')
ruby do_task.rb
say "${message[$(($?>0))]}"