这是我想要完成的具体任务。 zsh 的行为方式是我喜欢的
$ zsh
$ which clang > /dev/null 2&>1 && echo clang || echo gcc
clang
$ which doesntexist > /dev/null 2&>1 && echo doesntexist || echo gcc
gcc
但是,在 bash 中:
$ bash
$ which clang > /dev/null 2&>1 && echo clang || echo gcc
gcc
这是一般情况:
$ which clang > /dev/null 2&>1; echo $?
1
$ which clang; echo $?
/usr/bin/clang
0
我重定向输出的方式有问题。正确的方法是什么?
我认为您重定向的方式错误:
which clang > /dev/null 2&>1; echo $?
应该
which clang > /dev/null 2>&1; echo $?
这可能是任一 shell 允许前一种方法的方式。在 bash 中这不是正确的方法。 Bash 会将其解释为:
which clang >/dev/null 2 &>1; echo $?
其中2
作为参数添加。
您可以通过创建类似的函数来验证这一点
e() { echo "$@" >e.log; }
并将其称为:
e 1 >/dev/null 2&>/dev/null
你会得到1 2
在电子日志中。
在 bash 中,如果您像这样调用命令,也会更简单:
which clang &>/dev/null; echo $?
也不是调用外部二进制文件,例如which
, use type -P
反而。也不需要重定向 stderr 输出。
type -P clang >/dev/null; echo $?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)