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.
!!
: 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^