Bash

執行檔的按需安裝包裝函式

  • April 3, 2014

如何使以下功能正常工作

# Install git on demand
function git()
{
   if ! type git &> /dev/null; then sudo $APT install git; fi
   git $*;
}

通過git $*呼叫/usr/bin/git而不是函式git()

像這樣:

# 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失敗時)該怎麼做。

或者也許是一個更通用的函式能夠執行任何命令。在這種情況下,“-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”錯誤。

引用自:https://unix.stackexchange.com/questions/123028