我想执行以下命令ruby do_task.rb && say "done"
。
问题在于,如果命令失败,它什么也不会说。如何解决它,以便它总是说出些什么(我不介意它说“失败”而不是“完成”,或者总是说“完成”)。
答案 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))]}"