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

如何在bash脚本中忽略特定命令失败以避免脚本终止?

在bash中忽略指定命令的失败(类似make的-command)

问题描述

我使用#!/bin/bash -eu运行脚本,该脚本会在出现问题时自动终止,这符合我的需求。但有时我预期某个命令会失败,希望让bash忽略该失败条件。在make中可通过便捷的-command忽略命令状态,bash中有类似方法吗?我想到的只有不够优雅的写法:set +e; command; set -e。

解决方案

当然有更简洁优雅的方式!在bash里,你只需要在预期可能失败的命令后面加上|| true(或者更简短的|| :,因为:是bash的内置空命令,始终返回成功状态码0),就能让set -e忽略这个命令的失败。

举个实际例子:

#!/bin/bash -eu

# 这个命令如果失败,脚本会直接终止
ls /nonexistent-dir

# 这个命令即使失败,脚本也会继续往下执行
ls /nonexistent-dir || true

# 用更精简的写法效果完全一致
ls /nonexistent-dir || :

原理很直白:set -e的规则是当整个命令序列的返回值为非0时才会终止脚本。加上|| true后,就算前面的命令返回非0,true会返回0,整个序列的最终返回值就是0,脚本自然不会被终止。

对比你原来的set +e; command; set -e写法,这种方式不仅更短,还不需要临时关闭-e模式,避免了中间如果有其他意外命令失败却没被捕获的风险,安全性和可读性都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:57:35