GNU/Linux >> Tutoriels Linux >  >> Linux

Comment accéder au dernier argument d'une commande commentée ?

Je trouve . (alt . pour beaucoup d'autres) pour être très utile lorsque vous travaillez dans un terminal, en insérant le dernier argument de la dernière ligne à l'invite actuelle. Cependant, cela ne fonctionne pas lorsque la dernière ligne a été commentée (en supposant que set -o interactivecomments ).

Je ne peux pas penser à un cas d'utilisation exact, mais il est arrivé plusieurs fois que j'ai commenté une commande dont j'ai réalisé avant l'exécution qu'elle n'était pas ce dont j'avais besoin à ce stade, et que j'en voulais ensuite l'argument final dans un commande suivante.

Je me rends compte qu'il y a une logique à ignorer tout ce qui est commenté, car il n'est jamais interprété et donc rien n'est symbolisé en arguments, mais y a-t-il un moyen de faire ce que je veux ?

Ce ne serait pas idéal - mais serait utilisable - si je devais utiliser une frappe différente, liée à une autre commande qui ferait ce que je veux.

J'utilise Zsh, mais une solution Bash pourrait fonctionner ou être proche de ce que j'aurais besoin de faire dans Zsh.

Réponse acceptée :

Ne commentez pas la commande.

Au lieu de cela, mettez un : devant plutôt qu'un # . Cela fera de vos arguments de texte de commande l'utilitaire nul : , qui ne fait rien lorsqu'il est exécuté. Les arguments sont tokenisés et analysés, car il s'agit toujours d'une commande, mais rien d'autre n'est fait avec eux.

Il y a des cas où cela ne convient pas :en particulier, lors de la détermination de la commande elle-même a des effets secondaires. Un exemple simple est la substitution de commande :

$ : log $(find -print -delete) --target /var/run/cache

Dans ce cas, la commande à l'intérieur de $(...) serait exécuté et remplacé dans les arguments de : , même si la commande d'origine elle-même ne s'exécuterait jamais. Un cas moins destructeur serait ${foo:=default} expansion de paramètre, qui a pour effet secondaire d'attribuer une valeur à $foo .

Enfin, les redirections ou pipes auront toujours lieu :

$ : foo > outfile
$ : bar | grep x | ...

dans les deux cas, enverra une sortie vide dans la destination, qui tronquera ou créera le fichier ou exécutera les commandes suivantes, qui peuvent ne pas aimer l'entrée vide qu'elles obtiennent.

Si vous n'avez aucune de ces préoccupations particulières pour votre commande, cela est entièrement sûr et fonctionne dans zsh, Bash et n'importe quel shell compatible POSIX (bien que le comportement alt-. ne fonctionnera pas partout).

Si c'est spécifiquement le dernier mot que vous voulez, zsh fournit des raccourcis clavier et des commandes personnalisables que vous pouvez utiliser pour manipuler la ligne de commande. Si vous bindkey '^K' kill-region alors vous pouvez revenir avant le mot, CtrlK pour effacer jusqu'au début de la ligne, : , puis ayez une commande sûre avec juste le mot qui vous intéresse à gauche.

Connexe :Debian – Comment installer certains paquets de Debian « instable » sur un ordinateur exécutant Debian « stable » ?
Linux
  1. Fonctionnement de la commande oc debug dans OpenShift

  2. Comment fonctionne la commande Tee ? ?

  3. Comment le caractère générique * est-il interprété comme une commande ?

  4. Comment puis-je rappeler l'argument de la commande bash précédente ?

  5. Comment imprimer la dernière ligne d'un fichier compressé gz dans la ligne de commande ?

Comment utiliser la commande Linux tee

Comment utiliser la commande top sous Linux

Comment utiliser la commande Linux Ping

Comment utiliser la commande nmap

Comment personnaliser la commande Linux top

Comment utiliser la commande fd sur le système Linux