bash:传播别名中执行的命令的退出代码

时间:2013-08-14 07:08:57

标签: bash alias exit-code

在bash中,我想传播在别名中执行的特定命令的退出代码,这样别名调用本身就会返回它(退出它)。

想象一下下面的例子(请注意:命令没有意义,只是演示了我面临的问题):

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; alias cdb='cd \/b'
cda && cdb

对我来说,没有像/a/b这样的目录来确保命令失败。 我只想在cdb别名执行成功的情况下执行cda别名。但是,由于echo是最后一个命令,因此exit状态为0 =>两者都被执行

我尝试的是:

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; exit $exit_code'; alias cdb='cd \/b'
cda && cdb
然而,这完全退出了外壳=>对我来说不可行。

知道如何将退出状态(在我的情况下为$exit_code)传播为别名退出状态吗?

2 个答案:

答案 0 :(得分:7)

最好只使用函数而不是别名:

cda() {
    cd /a
    exit_code=$?
    echo "STATUS: $exit_code"
    return "$exit_code" # optional
}

cdb() {
    cd /b
    exit_code=$?
    echo "STATUS: $exit_code"
    return "$exit_code" # optional
}

至于别名,你可以尝试最后添加一个测试:

alias cda='cd \/a; exit_code=$?; echo "STATUS: $exit_code"; [[ exit_code -eq 0 ]]'; alias cdb='cd \/b'

答案 1 :(得分:1)

我在.bashrc

中有这个功能
return_exitcode(){
    return $1
}

模拟任何所需的退出代码(输入检查未完成。)。

这样,别名将是:

alias cda='cd /a; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code'
alias cdb='cd /b; exit_code=$?; echo "STATUS: $exit_code"; return_exitcode $exit_code'

注意:

  1. 使用函数总是优于别名。因此konsolebox的答案是正确的答案。
  2. 这个答案之所以被添加,只是因为这个小功能有时很方便,而; ...
  3. 之后用命令编写命令