可执行文件的按需安装包装函数

可执行文件的按需安装包装函数

如何使以下功能正常工作

# 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”错误。

相关内容