Exécuter la dernière commande avec toutes les lettres transformées en minuscules

Souvent, j’ai exécuté une commande avec toutes les lettres en majuscule (peut-être parce que CapsLock était activé ) et j’ai appuyé sur Entrée avant de réaliser ceci.

Comment puis-je exécuter la dernière commande avec toutes les lettres transformées en minuscules?

Vous pouvez y parvenir en ajoutant la petite fonction suivante (je l’appelle ?? pour qu’elle soit très simple, mais vous pouvez le modifier à votre guise) dans votre fichier .bashrc :

 ?? () { "${@,,}"; } 

Ensuite, quand vous exécuterez:

 ?? !! 

la dernière commande sera exécutée avec toutes les lettres en minuscule.

Explication

  • !! : cela fait partie des outils d’historique de bash, plus précisément, il s’agrandit jusqu’à la dernière commande exécutée . Donc, par exemple, echo !! affichera la dernière commande exécutée dans cette session shell particulière.
  • "${@,,} : La construction ${foo,,} convertira le contenu de la variable $foo convertie en lettres minuscules. $@ Est le tableau de parameters de position. Lorsqu’il est utilisé dans une fonction, il est étendu à les parameters passés à cette fonction.

Ainsi, "${@,,}" convertira simplement ce qui a été passé à la fonction en minuscule, puis l’exécutera. Par conséquent, exécuter le ?? fonctionner avec !! en tant que paramètre convertira la dernière commande en minuscule et l’exécutera.

  `echo !!  |  tr '[: upper:]' '[: lower:]' ' 

La clé est entre les guillemets ` (backticks) – qui exécutent la sortie en tant que commande.

voici une réponse des programmeurs …. utilisez python:

 `echo "print '!!'.lower()" | python` 

Ou Ruby:

 `echo "print '!!'.downcase" | ruby` 

Ou Perl (probablement mon préféré):

 `perl -e "print lc('!!');"` 

Ou PHP:

 `php -r "print strtolower('!!');"` 

Ou Awk:

 `echo "!!" | awk '{ print tolower($1) }'` 

Ou Sed:

 `echo "!!" | sed 's/./\L&/g'` 

Ou Bash:

 str="!!" ; ${str,,} 

Ou zsh

 echo "A='!!' ; \$A:l" | zsh 

Ou NodeJS si vous l’avez:

 `echo "console.log('!!'.toLowerCase());" | node` 

Vous pouvez aussi utiliser dd (mais pas moi!):

  `echo "!!" | dd conv=lcase 2> /dev/null` 

Vous pouvez également créer un petit script pour faire le travail:

 sudo bash -c 'cat << EOF > /usr/local/bin/lower #!/usr/bin/python import fileinput print "".join(fileinput.input()).lower(), EOF' && sudo chmod +x /usr/local/bin/lower 

Que vous utilisez comme si:

 `echo !! | lower` 

Et celui avec sed ,

 $(echo !! | sed 's/^\(.*\)$/\L\1/g') 

Exemple:

 $ SUDO APT-GET UPDATE SUDO: command not found $ $(echo !! | sed 's/^\(.*\)$/\L\1/g') 

Sortie:

 $(echo SUDO APT-GET UPDATE | sed 's/^\(.*\)$/\L\1/g') [sudo] password for avinash: 0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Connectin^