Changer le programme Ubuntu qui s'exécute quand une commande est introuvable

2

Lorsque je tape une commande non trouvée dans un PATH dans Ubuntu, je reçois quelque chose comme ceci:

$ rdesktop
The program 'rdesktop' is currently not installed.  You can install it by typing:
sudo apt-get install rdesktop

Je crois que c'est un script qui cherche dans les archives APT et suggère un paquet d'installation. Je voudrais le changer pour qu'il me propose de le télécharger à la presse d'un "y". Deux questions:

1) Où se trouve le fichier?

2) Si j'ajoute simplement la ligne d'installation de manière triviale, je me plaindrai de ne pas être une racine et j'échouerai (car il a rdesktopété exécuté en tant qu'utilisateur ordinaire). Comment lui faire demander un mot de passe et l'utiliser pour obtenir un accès root?

B. Marek
la source

Réponses:

6

Lorsque bash rencontre une commande qu'il ne peut pas trouver, il recherche une fonction appelée command_not_found_handle () et l'exécute.

Sous Ubuntu, cela est défini dans /etc/bash.bashrc

Par défaut, il exécute un script python dans /usr/lib/command-not-found

Vous pouvez le faire faire ce que vous aimez, et cela se fait mieux dans votre propre ~/.bashrcdossier:

    command_not_found_handle() {
        echo -n "Do you want to install $1? [N/y] "
        read -N 1 REPLY
        echo
        if [[ $REPLY == [Yy] ]]; then
            sudo apt-get install -- "$1"
        fi
    }

La partie sudo répond à la partie section de votre question, mais vous devrez évidemment demander à un mot de passe de passer à la racine pour effectuer l’installation.

Paul
la source
Solution très élégante, +1.
Percée