2

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

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

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

对我来说,没有这样的目录:/a/b确保命令失败。我cdb只想在cda别名执行成功的情况下执行别名。但是,echo与最后一个命令一样,它以exitstatus 0=> 结束,两者都被执行

我试过的是:

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

但是这完全退出了外壳=>对我来说不可行。

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

4

2 回答 2

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'
于 2013-08-14T07:14:36.603 回答
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. 添加这个答案只是因为这个小功能有时很方便,同时用;......编写一个又一个命令
于 2013-08-14T07:49:27.807 回答