我有这个 bash 函数,如果它不在 PATH 中,我正尝试用它来安装命令行工具:
ncf(){
if ! type -f ncf &> /dev/null || ! which ncf &> /dev/null; then
echo "Installing NPM package '@oresoftware/ncf' globally...";
npm i -s -g '@oresoftware/ncf' || {
echo -e "Could not install NPM package '@oresoftware/ncf' globally." >&2
echo -e "Please check your permissions to install global NPM packages." >&2
return 1;
}
fi
command ncf $@;
}
我有几个问题 -type -f ncf
和是which ncf
多余的吗?现在,我正在检查它们中的任何一个是否以非零退出 - 如果其中一个退出,我会重新安装(至少我认为代码是这样做的)。
我的另一个问题是 - 是否&>
适用于 4 之前的 bash 版本,或其他 shell,如 sh、ksh、zsh 等?我是否应该使用另一种比 更跨平台的构造&>
?
答案1
which
与 是多余的type
,除非它完全做错了事情。不要使用which
曾经(除了 ksh 或 zsh)。也不要type -f
在便携式 sh 中使用:这是 ksh/bash 扩展。只需使用普通的type
.如果您想要查找外部命令,尽管存在同名函数,您可以使用(unset -f ncf; type ncf)
.
要将输出重定向,请使用>/dev/null 2>&1
.&>/dev/null
在 ksh、bash 和 zsh 中可以缩写为,但在普通 sh 中则不能缩写。
if ! type -f ncf >/dev/null 2>/dev/null; then …