如果有一个命令,比如说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 "$*" ]]
}