在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
)传播为别名退出状态吗?
答案 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'
注意:
;
...