我使用以下选项
set -o pipefail
set -e
在bash脚本中停止执行错误。我有~100行脚本正在执行,我不想检查脚本中每一行的返回代码。
但是对于一个特定的命令,我想忽略这个错误。我该怎么做呢?
我使用以下选项
set -o pipefail
set -e
在bash脚本中停止执行错误。我有~100行脚本正在执行,我不想检查脚本中每一行的返回代码。
但是对于一个特定的命令,我想忽略这个错误。我该怎么做呢?
当前回答
虽然|| true是首选之一,但你也可以这样做
var=$(echo $(exit 1)) # it shouldn't fail
其他回答
不要停止,也保存退出状态
以防万一,如果你想让你的脚本不停止,如果一个特定的命令失败,你也想保存失败命令的错误代码:
set -e
EXIT_CODE=0
command || EXIT_CODE=$?
echo $EXIT_CODE
除了“返回true”,您还可以使用“noop”或null实用程序(在POSIX规范中提到):并且只是“什么都不做”。你可以省下几个字母。:)
#!/usr/bin/env bash
set -e
man nonexistentghing || :
echo "It's ok.."
output=$(*command* 2>&1) && exit_status=$? || exit_status=$?
echo $output
echo $exit_status
使用此命令创建日志文件的示例
log_event(){
timestamp=$(date '+%D %T') #mm/dd/yy HH:MM:SS
echo -e "($timestamp) $event" >> "$log_file"
}
output=$(*command* 2>&1) && exit_status=$? || exit_status=$?
if [ "$exit_status" = 0 ]
then
event="$output"
log_event
else
event="ERROR $output"
log_event
fi
我有点喜欢这个解决方案:
: `particular_script`
在反勾号之间执行命令/脚本,并将其输出提供给命令":"(相当于"true")。
$ false
$ echo $?
1
$ : `false`
$ echo $?
0
编辑:修正了丑陋的错别字
虽然|| true是首选之一,但你也可以这样做
var=$(echo $(exit 1)) # it shouldn't fail