如果结果为空白,如何将单行命令的退出代码设置为 1?

如果结果为空白,如何将单行命令的退出代码设置为 1?

如果有一个命令,比如说echo "",我希望它的退出代码是1,但是如果我要运行该命令,echo "foo"我希望状态代码是0

答案1

我将使用一个函数来实现这个功能:

notblank() {
    local result
    result=$( "$@" )     # execute the command and capture the output
    echo "$result"
    [[ -n "$result" ]]
}

然后:

$ notblank echo "hello"; echo $?
hello
0

$ notblank echo "$noSuchVariable"; echo $?

1

特别是对于回声:

myecho() { echo "$*"; [[ -n "$*" ]]; }

甚至

echo() {
    builtin echo "$*"
    [[ -n "$*" ]]
}

echo -n "some string"不会尊重该-n选项。这可以解决,但代价是更加复杂:

echo () {
    local opt OPTIND OPTARGS
    local echo_opts=()
    while getopts :neE opt; do
        case $opt in
            [neE]) echo_opts+=("-$opt") ;;
            ?)  echo "invalid option: -$OPTARG" >&2
                return 1
                ;;
        esac
    done
    shift $((OPTIND - 1))

    builtin echo "${echo_opts[@]}" "$*"
    [[ -n "$*" ]]
}

相关内容