Desativar o comportamento padrão de Copiar e Colar no Bash

9

Quando eu colo na minha sessão de terminal, o shell imediatamente executa o comando sem que eu pressione a tecla enter.

Eu realmente não sei como desabilitar esse comportamento.

Estou usando o terminal pré-instalado no MacOS Yosemite.

    
por Opaldes 14.09.2016 / 12:19

5 respostas

15

Com bash 4.4 ou mais recente e em terminais que suportam colar com colchetes a xterm , você pode fazer:

bind 'set enable-bracketed-paste'

(ou adicione set enable-bracketed-paste ao seu ~/.inputrc )

Isso fará com que o buffer de copiar e colar seja inserido no prompt, em vez de os caracteres nele serem interpretados como se fossem digitados (você ainda pode ter problemas se esse buffer contiver caracteres como ^C , ^Z e seu emulador de terminal não os filtra).

zsh faz isso por padrão desde a versão 5.1.

Para outros shells ou terminais, consulte também: Como posso me proteger desse tipo de abuso da área de transferência?

    
por 14.09.2016 / 13:28
6

Isso acontece quando você cola um caractere "nova linha". Por exemplo, se você estiver colando várias linhas ou se copiar de forma desconhecida um retorno de carro no final da linha. AFAIK não há como realmente desabilitar esse comportamento, mas existem maneiras de mitigá-lo.

A maneira mais fácil é simplesmente copiar uma linha de cada vez e perder o último caractere, adicionando-o manualmente depois.

Ou, como o_velour_fog aponta abaixo, você também pode colá-lo em um editor que mostre caracteres não impressos e selecione novamente sem a nova linha.

Há uma ou duas soluções alternativas para distribuições GNU / Linux, mas não há idéia se o conceito pode ser transferido para o MacOS. Independentemente disso, dê uma olhada aqui e veja se há um arquivo similar no mac que você poderia alterar. Infelizmente, duvido disso.

    
por 14.09.2016 / 12:29
5

Antes de colar, digite uma aspa simples e cole. control-c e seta para cima para editá-la como uma linha gigante.

aspas duplas também funcionam, caso o texto contenha aspas simples, mas não duplas. Tudo bem se ele contiver $ ou outras coisas que se expandem entre aspas duplas, porque você não está realmente executando a linha gigante citada como um comando.

Você não pode realmente editar tudo, porque as novas linhas iniciam um prompt de continuação (não a terminologia oficial) em vez de criar uma grande linha longa.

dadas estas 4 linhas:

echo
ls
foo
bar

colar como sugiro resultará em sua tela:

$ 'echo 
> ls
> foo
> bar        <or cursor here if you didn't include a trailing newline
> [cursor here]

Você pode então pressionar control-C e seta para cima. (control-C destrói tudo na mesma linha que o cursor, então pressione return primeiro se houver texto útil lá.)

Uma alternativa é fechar a citação e pressionar return e, em seguida, seta para cima.

De qualquer forma, após a seta para cima

$ 'echo
ls
foo
bar

controle-a e remova o primeiro ' . Use control-left e control-right para mover-se rapidamente pelo bloco de colagem (por palavras). Ou se a configuração do seu terminal não suportar teclas de seta de controle, alt-b e alt-f.

As novas linhas literais realmente separam comandos, e essas 4 linhas entrarão no seu histórico de comandos separadamente . Você pode querer alterá-las para ; ou && . (Eu não conheço um truque para isso, basta usar a repetição de teclas para avançar ou retroceder para chegar lá rapidamente e fazer manualmente).

    
por 14.09.2016 / 16:11
2

Isso acontece porque sua pasta termina com uma nova linha e os emuladores de terminal basicamente alimentam a pasta para caractere por caractere. Neste processo, bash não conhece realmente um datilógrafo humano de uma máquina.

Eu costumo prestar mais atenção ao copiar e colar que não inclua uma nova linha, mas há um truque que você pode tentar: antes de colar, no bash, digite C-x C-e . Deve lançar $EDITOR com um arquivo vazio. Tudo o que você salvar nesse arquivo e sair, o bash será executado. Então você pode agora colar o seu comando no editor, possivelmente manipular mais as coisas e depois executá-las de uma só vez.

    
por 14.09.2016 / 18:30
-1

Não estou relacionado com a empresa, sou um cliente muito satisfeito. Experimente este programa de terminal: link . Há também uma versão para Mac disponível.

Se eu violar com esta resposta qualquer regra SE, informe-me e excluo a resposta.

Editar:

Quando entendi as outras respostas corretamente, esse problema pode ser causado pelo programa do terminal. O programa de terminal ZOC é um software profissional perfeitamente concebido para o trabalho. Cola o texto selecionado sem qualquer caractere adicional. Você pode registrar suas sessões em um arquivo de texto separado. E muito mais

Atualização:

O programa do terminal tem uma opção Paste without final 'newline' . Pode ser isso ajuda.

    
por 14.09.2016 / 18:16