Atalho para excluir o comando, mas mantenha os argumentos

1

Ao trabalhar no terminal, muitas vezes tenho sequências de comandos como:

cat long/path/to/file/xyz.file
nano long/bath/to/file/xyz.file
bash long/path/to/file/xyz.file

etc

Normalmente, pressiono o controle + A, a seta para a direita algumas vezes, retrocedo algumas vezes e escrevo o novo comando.

Mas durante os dez segundos que estou fazendo isso, sempre me pergunto se existe algum atalho mágico que faça isso para mim. Então minha pergunta é ...

Existe um atalho de terminal para excluir o comando, mas manter os argumentos?

Se não, existe uma maneira de escrever seus próprios atalhos?

Os terminais que eu uso na maioria das vezes são Ubuntu e OSX, se isso importa.

    
por sudo rm -rf slash 02.10.2017 / 17:22

3 respostas

5

Em muitas shells, a tecla Alt D irá apagar do cursor até o final da palavra sob o cursor, então você pode fazer Ctrl A seguido por Alt D para apagar a primeira palavra.

Como alternativa, em shells com manipulação de histórico, !:1-$ será substituído por todos os parâmetros do comando anterior, para que você possa digitar seu novo comando seguido por ele para copiar os argumentos do comando anterior:

$ echo Hello sudo rm -rf slash
Hello sudo rm -rf slash

$ printf "%s " !:1-$
Hello sudo rm -rf slash

Se seus comandos tiverem argumentos únicos ou se você estiver interessado apenas no último argumento, você poderá encurtar isso para !$ ; então no seu caso

$ cat long/path/to/file/xyz.file
$ nano !$
$ bash !$
    
por 02.10.2017 / 17:28
1

Eu fornecerei uma maneira alternativa além de usar !:1-$ para obter todos os argumentos.

Você pode usar o padrão de correção de erros de digitação ^strA^strB para substituir strA por strB . Por exemplo, depois de

$ cat path/to/file

Você pode fazer:

$ ^cat^nano

que mudará a primeira correspondência de cat no comando anterior e executará esse comando novamente. Obviamente, esse truque poderia ser mais útil em outros casos, como se você quisesse alterar um nome de arquivo no meio do comando muito longo anterior.

Espero que isso ajude.

    
por 12.02.2018 / 20:18
0

Ok. Então, abaixo só é aplicável para o bash shell ou não tenho certeza se isso funciona em todos os shells.

Digamos que você esteja usando seu argumento de linha de comando em todos os comandos subseqüentes.
cat long/path/to/file/xyz.file
Então, no próximo comando você quer manter o seu argumento "long / path / to / file / xyz.file" igual, mas quer mudar o seu comando, é assim que você o fará
nano !$
e no próximo comando subseqüente você fará o mesmo. bash !$ . Portanto, !$ mantém o último argumento do último comando como está. Por exemplo, tail -f /var/log/messages e somecommand !$ na verdade se tornarão somecommand /var/log/messages e não somecommand -f /var/log/messages
Há ainda outro recurso que permite manter o último comando como está. Por exemplo, você quer executar o último comando com privilégios sudo. Vamos dizer que você correu tail /var/log/messages e você não tem permissões para ver o conteúdo, então, em vez de escrever todo o comando com o sudo você pode simplesmente fazer sudo !! \ bash shell irá converter automaticamente isso para o sudo tail /var/log/messages
Espero que isso ajude: -)

    
por 02.10.2017 / 17:38