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-e
e 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