You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash单行别名:仅当首个命令执行失败时才执行第二个命令

实现仅在第一个命令执行失败时运行第二个命令的Bash别名

可以实现,核心是区分「命令执行失败」和「被手动终止(Ctrl+C)」的退出状态码:

直接用下面的单行别名即可:

alias start-app='./bin/dev; if [ $? -ne 0 ] && [ $? -ne 130 ]; then bundle exec rails s; fi'

或者更简洁的写法:

alias start-app='./bin/dev || ( [ $? -eq 130 ] || bundle exec rails s )'

原理说明

  • 你之前用的./bin/dev || bundle exec rails s会在第一个命令任何非零退出码时触发第二个命令,但Ctrl+C终止程序时,进程的退出码是130(对应SIGINT信号),这不属于「执行失败」,所以需要排除这个情况。
  • 第一种写法:先执行./bin/dev,然后检查退出码$?——如果既不是0(执行成功)也不是130(被Ctrl+C终止),就运行第二个命令。
  • 第二种写法:用||连接逻辑,当第一个命令退出码非零时,进入括号内判断:如果退出码是130就跳过,否则执行第二个命令。

如果还有其他需要排除的手动终止信号(比如SIGQUIT对应的退出码131),可以在判断里追加,比如[ $? -ne 0 ] && [ $? -ne 130 ] && [ $? -ne 131 ]。

内容的提问来源于stack exchange,提问作者Frexuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:02:38