如何使以下功能正常工作
# Install git on demand
function git()
{
if ! type git &> /dev/null; then sudo $APT install git; fi
git $*;
}
通过调用git $*
而/usr/bin/git
不是函数git()
?
答案1
像这样:
# Install git on demand
function git()
{
if ! type -f git &> /dev/null; then sudo $APT install git; fi
command git "$@";
}
内置command
抑制函数查找。我还将您的更改$*
为,"$@"
因为这样可以正确处理不是一个单词的参数(例如,带有空格的文件名)。
此外,我将-f
参数添加到type
,因为否则它会注意到该函数。
您可能需要考虑发生错误时(例如apt-get install
失败时)该怎么办。
答案2
或者也许是一个能够运行任何命令的更通用的函数。在这种情况下,“-f”可以替换为“-t”。不会发生与函数的冲突。
function runcmd()
{
if ! type -t $1 >/dev/null; then
pkg=$(apt-file search -x "bin.*$1\$" | cut -d: -f1)
sudo apt-get install $pkg
fi
eval "$@"
}
当然,必须处理“apt-get install”错误。