web-dev-qa-db-fra.com

Puis-je utiliser '!!' dans des alias ou des scripts?

Dans le terminal, je peux utiliser !! qui fera référence à ma commande précédente.
Est-il possible d'utiliser ceci dans un alias? Je l'ai essayé, mais ce qui se passe, c'est que les doubles points d'exclamation sont interprétés littéralement.

Ce que je veux avoir possible, c'est:

  1. J'entre une commande
  2. Je tape un alias qui inclura ce qui a été entré à l'étape 1

Si une solution utilisant des scripts est également acceptable.

10
Ludwig Magnusson

La commande qui répertorie la dernière commande exécutée est fc -nl -1. En utilisant la substitution de sortie, nous pouvons ajouter plus de paramètres au même contenu

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Citer, cependant, peut être un problème avec cette approche

Une caractéristique très intéressante de fc est que si vous exécutez simplement la commande fc, elle ouvrira l'éditeur de texte spécifié dans la variable inFCEDIT (que vous souhaiterez probablement stocker dans ~/.bashrc) et le contenu de la ligne sera votre dernière commande. Pour votre facilité, je vous suggère d'utiliser nano comme éditeur de texte, mais si vous connaissez vim, c'est encore mieux.

Par exemple, si je dois éditer qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindow Huge line, hein? Mais avec fc, je peux ouvrir vim et éditer /org/ayatana/bamf/matcher, enregistrer, quitter et il sera exécuté.

11
Sergiy Kolodyazhnyy

Vous ne pouvez pas utiliser !! mais ...

Du manuel :

Un alias utile à utiliser avec la commande fc est r='fc -s', de sorte que taper 'r cc' exécute la dernière commande commençant par cc et taper 'r' ré-exécute la dernière commande. .

9
Rinzwind

Si vous insistez pour utiliser la syntaxe d'expansion de l'historique !! à la place de fc (déjà mentionné), il existe un moyen.

Par défaut, l'extension history est désactivée pour les sessions Shell non interactives, par exemple. dans les scripts.

Pour activer l’extension de l’historique dans les scripts, activez d’abord les options de Shell appropriées:

set -o history 
set -o histexpand

set -o histexpand peut également être écrit en tant que set -H.

Maintenant, les opérations d'expansion de l'historique, par exemple !! fonctionnerait dans le script.

8
heemayl