impedir colar de várias linhas no bash

10

Costumo usar ctrl+cpara copiar texto de algum aplicativo GUI e colá-lo no meu emulador de terminal (terminador), usando o botão direito do mouse no menu e colar. Às vezes, esqueço que a área de transferência contém várias linhas, que quando coladas no bash fazem com que cada linha seja "executada"

Existe alguma solução para impedir a colagem de várias linhas por completo?

Martin Vegter
fonte
colar no bloco de notas em primeiro lugar, para ver o que você tem, então se é OK ir em frente para colá-lo em sua aplicação
Skaperen
1
no bash, execute o comando sleep 999999e cole se estiver ok. o comando dormir não lê as linhas e elas são descartadas quando você pressiona ctrl+c.
Skaperen
2
Relevante: security.stackexchange.com/q/39118
Stéphane Chazelas
1
@Otheus, printf '\e[?2004h'na maioria dos emuladores de terminal do tipo xterm, permite um modo de colar entre colchetes, onde o terminal coloca o texto colado entre parênteses, para que os aplicativos possam detectar onde a pasta começa e onde termina. O xterm também suporta outro modo em \e[?2005hque todos os caracteres colados são prefixados ^V(entendidos por muitos aplicativos e pela disciplina tty line como litteral-next).
Stéphane Chazelas

Respostas:

5

Esta resposta não é a mais específica para a pergunta do usuário. Consulte a minha segunda resposta. Estou deixando isso aqui porque aborda a questão mais geral .

De acordo com os comentários a seu post original, você precisa (1) um emulador de terminal que suporta enquadradas colar e (2) correspondente suporte para o que está em execução no terminal, ou seja, vim, bash, zsh. Emuladores de terminal com suporte para pasta entre colchetes (lista a ser atualizada com base nos comentários desta postagem):

  • xterm - Desde a ??
  • gnome-terminal - Desde a ??
  • putty - desde 0,63 (data de lançamento de 06/08/2013)

Aplicativos com suporte ao modo entre colchetes:

  • vim
  • zsh

Por isso bash, o StéphaneChazelas montou um script de shell para facilitar a detecção desse modo e tomar as ações apropriadas.

Uma resposta mais específica - impedindo que as linhas sejam cortadas - não pode ser respondida sem o conhecimento do programa unix que está sendo executado quando você pressiona colar.

Um gerente da área de transferência talvez seja o que você precisa.

Otheus
fonte
O script em não detectar pasta entre colchetes, é uma perl script que emula uma 3ª forma de pasta entre colchetes que não requerem suporte na aplicação diferente das necessidades de aplicação para entender ^ V como Litteral próxima (esse script seria na verdade, responda a essa pergunta que provavelmente precisaria ser aprimorada, era apenas um PoC).
Stéphane Chazelas
@ StéphaneChazelas fique à vontade para editar / melhorar meu post. :) "As necessidades de aplicação para entender ^Vcomo literal-nextMas como é que a. ^VEntrar no fluxo de entrada da aplicação?
Otheus
Ele é obtido se o dispositivo tty interno não estiver no modo icanon (como basho prompt do readline o verá (e tratará como literal-next)). Se no modo ICANON, a disciplina de linha desse dispositivo tty interior vai tira-lo (desde que o lnextpersonagem é ^V), assim como quando você digitar Ctrl-V X manualmente ..
Stéphane Chazelas
1
Se não estiver usando esse script, nada será inserido, a ^Vmenos que você use o quoted pastemodo xterm (ativado pelo envio \e[?2005h). Esse perlscript pode ser adaptado para remover tudo, exceto a primeira linha em uma pasta de várias linhas (embora não seja confiável para pastas grandes), mas como já é, já que cita a nova linha da linha de leitura (como se você tivesse pressionado Ctrl- V Ctrl-J), impede que as linhas sejam executadas (elas são apenas adicionadas ao buffer de edição e você ainda precisa pressionar Enter para executá-las).
Stéphane Chazelas
4
Qual segunda resposta?
Xiao