Molte volte ho eseguito un comando con tutte le lettere in maiuscolo (forse perché CapsLock era attivo) e ho premuto Enterprima di rendermene conto.
Come posso eseguire l'ultimo comando con tutte le lettere trasformate in minuscolo?
Molte volte ho eseguito un comando con tutte le lettere in maiuscolo (forse perché CapsLock era attivo) e ho premuto Enterprima di rendermene conto.
Come posso eseguire l'ultimo comando con tutte le lettere trasformate in minuscolo?
Risposte:
Puoi farlo aggiungendo la seguente piccola funzione (la chiamo ??
molto semplice, ma puoi cambiarla come desideri) nel tuo .bashrc
file:
?? () { "${@,,}"; }
Successivamente, quando eseguirai:
?? !!
l'ultimo comando verrà eseguito con tutte le lettere in minuscolo.
!!
: fa parte degli strumenti della cronologia di bash, in particolare si espande all'ultima esecuzione del comando . Quindi, per esempio, echo !!
stamperà l'ultimo comando eseguito in questa particolare sessione di shell."${@,,}
: Il costrutto ${foo,,}
convertirà il contenuto della variabile $foo
convertita in tutte le lettere minuscole. $@
è l'array di parametri posizionali. Se utilizzato all'interno di una funzione, viene espanso ai parametri passati a quella funzione.Quindi, "${@,,}"
convertirà semplicemente tutto ciò che è stato passato alla funzione in minuscolo e quindi lo eseguirà. Pertanto, l'esecuzione della ??
funzione con !!
come parametro convertirà l'ultimo comando in minuscolo ed eseguirà.
"!!"
.
??
converte i suoi argomenti lettere per lowercaes e !!
ri-scrittura automaticamente il comando precedente nel comando corrente (in modo ??
prende come argomento il comando precedente).
`eco !! | tr '[: upper:]' '[: lower:]' '
La chiave è tra le `
virgolette (backtick) - che esegue l'output come comando.
tr
sarebbe anche la mia prima scelta. Funziona anche (in alternativa ai backtick e senza le classi parentesi POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
ecco la risposta di un programmatore .... usa python:
`echo "print '!!'.lower()" | python`
O Ruby:
`echo "print '!!'.downcase" | ruby`
O Perl (probabilmente il mio preferito):
`perl -e "print lc('!!');"`
O PHP:
`php -r "print strtolower('!!');"`
O Awk:
`echo "!!" | awk '{ print tolower($1) }'`
O Sed:
`echo "!!" | sed 's/./\L&/g'`
O Bash:
str="!!" ; ${str,,}
O zsh
echo "A='!!' ; \$A:l" | zsh
O NodeJS se ce l'hai:
`echo "console.log('!!'.toLowerCase());" | node`
Potresti anche usare dd
(ma io no!):
`echo "!!" | dd conv=lcase 2> /dev/null`
Puoi anche creare un piccolo script per fare il lavoro:
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
Che usi così:
`echo !! | lower`
E quello con sed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
Esempio:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
Produzione:
$(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^
!!:l
.