Comment écrire un script pour sudo la dernière commande [dupliquer]


3

Cette question a déjà une réponse ici:

Habituellement, pour certaines commandes telles que apt-get install xxx, J'oublie d'ajouter sudo d'abord, alors je dois le retaper. Ce que je veux, c'est dans de tels cas, je tape simplement une commande simple, par exemple resudo. Il sera sudo ma dernière commande sudo apt-get install xxx. Est-ce possible en bash?


Réponses:


18

Vous pouvez simplement utiliser bash !!: c’est un raccourci pour relancer la dernière commande.

sudo !!

Quoi qu'il en soit, bash offre de nombreux raccourcis pour tout, vous pouvez simplement appuyer sur la flèche vers le haut (afin de récupérer la dernière ligne tapée), puis sur ^A ou Home et ajouter sudo Là.

Voici un aide-mémoire bash utile


Merci, ça marche très bien. Mais encore une autre question, il semble que !! n'est pas reconnu dans le script bash, pourquoi? Par exemple, je veux obtenir la dernière commande last_command = $ (!!), cela ne fonctionne pas.

@Todd: $() évalue une commande, la remplace par le résultat de la commande. Vous avez juste besoin de faire: last_command=!!sinon sinon !! était par exemple echo Hello, last_command=$(!!) sera étendu à last_command=hello.
peoro

@peoro: s'il vous plaît tester dans votre bash, last_command = $ (!!) provoque une erreur d'interprétation. Semble !! n'est tout simplement pas reconnu.

4
@Todd: le développement de l'historique est (généralement) désactivé dans les scripts car cela n'a aucun sens. Rappelez-vous que les scripts sont exécutés dans des sous-shell, donc si vous pouviez utiliser !! dans un script, il s'agirait de la dernière ligne de ce script, et non de la dernière chose que l'utilisateur exécutant le script a fait. Si vous essayez de faire un raccourci pour sudo !!, voir ma réponse ici pour savoir comment faire un alias de shell pour le faire.
Gordon Davisson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.