一个棘手的递归 bash 别名?首次使用时安装

一个棘手的递归 bash 别名?首次使用时安装

我想知道这是否可能,创建一个别名,如果该命令尚不存在,则执行 sudo apt-get 操作,然后实现别名以停止进行此更改。

因此我正在寻找这种语义

smartalias top = 
     if (not installed htop) then 
        install htop; 
     alias top htop; 
     top

答案1

您可以使用 shell 函数:

top() {
    if ! type htop &>/dev/null; then
        sudo apt-get install htop
    fi
    htop
}

答案2

Bash 有一个现有的功能可以解决这个问题:command_not_found_handle。这是当 bash 尝试执行外部命令时执行的钩子。 Zsh 有command_not_found_handler这是相似的。许多发行版都设置了 bash,以便在您尝试执行不存在的命令时它会提供安装相关包的功能。例如,您似乎使用的是 Debian 衍生版本,因此安装command-not-found包裹。这种机制相当于为发行版提供的每个命令设置所需的别名。

相关内容