Muitas vezes, executei um comando com todas as letras maiúsculas (talvez porque CapsLockestivesse ligado) e pressionei Enterantes de perceber isso.
Como posso executar o último comando com todas as letras transformadas em minúsculas?
Muitas vezes, executei um comando com todas as letras maiúsculas (talvez porque CapsLockestivesse ligado) e pressionei Enterantes de perceber isso.
Como posso executar o último comando com todas as letras transformadas em minúsculas?
Respostas:
Você pode fazer isso adicionando a seguinte função pequena (eu chamo ??
de muito simples, mas você pode alterar isso como quiser) em seu .bashrc
arquivo:
?? () { "${@,,}"; }
A seguir, quando você executará:
?? !!
o último comando será executado com todas as letras em minúsculas.
!!
: isso faz parte das ferramentas de histórico do bash, especificamente, se expande para a última execução do comando . Assim, por exemplo, echo !!
imprimirá o último comando executado nesta sessão shell específica."${@,,}
: A construção ${foo,,}
converterá o conteúdo da variável $foo
convertida em todas as letras minúsculas. $@
é a matriz de parâmetros posicionais. Quando usado dentro de uma função, é expandido para os parâmetros passados para essa função.Portanto, "${@,,}"
basta converter o que foi passado para a função em minúsculas e depois executá-lo. Portanto, executar a ??
função com !!
como parâmetro converterá o último comando em minúsculas e executá-lo.
"!!"
.
??
converte suas cartas de argumentos em letras minúsculas e !!
reescreve automaticamente o comando anterior no comando atual ( ??
assume como argumento do comando anterior).
`eco !! | tr '[: superior:]' '[: inferior:]' '
A chave está nas `
cotações (backticks) - que executam a saída como um comando.
tr
seria minha primeira escolha também. Também funciona (alternativa aos backticks e sem as classes de suporte POSIX):$( echo !! | tr '[A-Z]' '[a-z]')
aqui vem uma resposta dos programadores .... use python:
`echo "print '!!'.lower()" | python`
Ou Ruby:
`echo "print '!!'.downcase" | ruby`
Ou Perl (provavelmente o meu favorito):
`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, se você tiver:
`echo "console.log('!!'.toLowerCase());" | node`
Você também pode usar dd
(mas eu não usaria!):
`echo "!!" | dd conv=lcase 2> /dev/null`
Você também pode criar um pequeno script para fazer o trabalho:
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 você usa assim:
`echo !! | lower`
E aquele com sed
,
$(echo !! | sed 's/^\(.*\)$/\L\1/g')
Exemplo:
$ SUDO APT-GET UPDATE
SUDO: command not found
$ $(echo !! | sed 's/^\(.*\)$/\L\1/g')
Resultado:
$(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
.