Execute o último comando com todas as letras transformadas em minúsculas

15

Muitas vezes executei um comando com todas as letras em maiúsculas (talvez porque o CapsLock estava ativado), e pressionei Enter antes de perceber isso.

Como posso executar o último comando com todas as letras transformadas em minúsculas?

    
por Radu Rădeanu 13.05.2014 / 14:34

4 respostas

19

Você pode conseguir isso adicionando a seguinte pequena função (eu chamo de ?? para ser muito simples, mas você pode mudar isso como quiser) no seu arquivo .bashrc :

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

Em seguida, quando você executará:

?? !!

o último comando será executado com todas as letras em minúsculas.

Explicação

  • !! : isso faz parte das ferramentas de histórico do bash, especificamente, expande para o último comando correr . Portanto, por exemplo, echo !! imprimirá o último comando executado nesta sessão de shell específica.
  • "${@,,} : A construção ${foo,,} converterá o conteúdo do a 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, "${@,,}" simplesmente converterá o que foi passado para a função em minúscula e, em seguida, a executará. Portanto, a execução da função ?? com !! como um parâmetro converterá o último comando para minúsculo e será executado.

    
por Radu Rădeanu 13.05.2014 / 14:40
6
'echo  !! | tr '[:upper:]' '[:lower:]''

A chave está nas citações ' (backticks) - que executam a saída como um comando.

    
por pedrito 13.05.2014 / 17:25
4

aqui vem uma resposta dos programadores .... use python:

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

Ou Ruby:

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

Ou Perl (provavelmente meu favorito):

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

Ou PHP:

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

Ou Awk:

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

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 faria isso):

 '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'
    
por nettux443 14.05.2014 / 02:32
1

E aquele com sed ,

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

Exemplo:

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

Saída:

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