Bash
執行檔的按需安裝包裝函式
如何使以下功能正常工作
# 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”錯誤。