Pare a execução automática do terminal ao colar um comando

Pare a execução automática do terminal ao colar um comando

Certo, esse é um recurso um pouco chato porque algo acontece e outras vezes não, muito estranho.

Eu colo um comando no terminal com o objetivo de ajustar seus argumentos eàs vezesele é executado no segundo em que eu o colo. Às vezes isso não acontece.

Isto varia de embaraçoso (postar comentários absurdos em um IRC) a perigoso.

Como posso desativar esse recurso para sempre? Eu nunca, nunca, nunca quero que o terminal seja executado automaticamente quando eu colo nele.

Responder1

Não há execução automática. Você provavelmente também está copiando uma quebra de linha (ou mais) após o comando.

Se você colar um comandocomuma pausa, o shell (linha de comando) pensa que você pressionou o botão de pausa (Enter, Return) sozinho.


Esta resposta apenas explica por que o OP está obtendo o comportamento indesejado. No entanto, emoutra resposta, existe uma solução realpara o problema do OP.

Responder2

UmrealA solução é abrir o modo de edição ctrl-x ctrl-ee colar com segurança sua área de transferência no editor de sua escolha (geralmente emacs ou vim). Depois de terminar de editar o comando, salve e saia e ele será executado na linha de comando. Este é um bom hábito para comandos longos ou complexos, especialmente ao colar hashes de commit em comandos git, e pode ajudá-lo a evitar alguns resultados assustadores no longo prazo.

O editor pode ser alterado configurando as variáveis ​​VISUAL e EDITOR (estas têm significados diferentes, vejaaqui).

Responder3

Como outros mencionaram, o problema ocorre quando o texto colado contém caracteres de nova linha. Com esse conhecimento, sua pergunta é mais ou menos a mesma queeste em falha do servidor. Site diferente, então vou repetir minha resposta aqui…

O que você quer se chama 'pasta entre colchetes', um recurso que está disponível em alguns shells.

Supondo que você esteja usando uma versão recente do shell bash, você pode ativá-lo para a sessão atual da seguinte forma:

bind 'set enable-bracketed-paste on'

Agora experimente colando várias linhas:

echo Hello world
echo Again, I say, hello!

O shell reconhece que o texto foi colado (não digitado) e aguarda sua confirmação com um aviso. Se tudo parecer seguro para prosseguir, pressione a tecla Enter. Caso contrário, pressione Control-C para cancelar.

Se desejar ativar a colagem entre colchetes para cada nova sessão, adicione o comando ao seu arquivo .inputrc:

cd ~
echo "set enable-bracketed-paste" >> .inputrc

Outra opção é mudar defestaparazsh, onde a colagem entre colchetes está habilitada por padrão. Para substituir seu shell atual por um shell zsh:

exec zsh

Com o zsh, o texto colado fica destacado, o que é legal. Novamente, pressione Enter para executar o(s) comando(s) ou Control-C para cancelar.

Se você gosta de zsh e deseja torná-lo o shell padrão:

chsh -s /bin/zsh

Responder4

Eu uso este alias para colar e meu comando NÃO é executado

alias nonewlinepaste='history -s `xsel -b`; sleep 1; xdotool key Up 1>/dev/null'  # xsel ref. https://unix.stackexchange.com/a/96398/17671  # xdotool ref. https://unix.stackexchange.com/questions/267704/command-to-simulate-keyboard-input#comment1038650_267705

informação relacionada