impedire la pasta multi-linea in bash


10

Uso spesso ctrl+cper copiare il testo da qualche applicazione gui e quindi incollarlo nel mio emulatore di terminale (terminatore), usando il tasto destro del mouse e incollare. A volte dimentico che gli Appunti contengono diverse righe, che una volta incollate in bash fanno sì che ogni riga venga "eseguita"

Esiste una soluzione per impedire interamente l'incollaggio multilinea?


incolla prima nel blocco note, per vedere cosa hai, quindi se è OK vai avanti per incollarlo nella tua applicazione
Skaperen,

1
in bash esegui il comando, sleep 999999quindi incolla se sembra ok. il comando sleep non legge le righe e queste vengono eliminate quando si preme ctrl+c.
Skaperen,



1
@Otheus, printf '\e[?2004h'nella maggior parte degli emulatori di terminali simili a xterm abilita una modalità incolla tra parentesi in cui il terminale racchiude il testo incollato in modo che le applicazioni possano rilevare dove inizia e dove termina l'incollaggio. xterm supporta anche un'altra modalità con il \e[?2005hprefisso di tutti i caratteri incollati ^V(compresi da molte applicazioni e dalla disciplina tty line litteral-next).
Stéphane Chazelas,

Risposte:


5

Questa risposta non è la più specifica per la domanda dell'utente . Vedi la mia seconda risposta. Lascio questo qui perché affronta il problema più generale .

Per i commenti al tuo post originale, è necessario (1) un emulatore di terminale che supporta tra parentesi incollare e (2) il supporto corrispondente per tutto ciò che è in esecuzione nel terminale, cioè vim, bash, zsh. Emulatori di terminale che supportano paste tra parentesi (elenco da aggiornare in base ai commenti a questo post):

  • xterm - da ??
  • gnome-terminal - da ??
  • putty - da 0.63 (data di rilascio 2013-08-06)

Applicazioni che supportano la modalità bracketing:

  • vim
  • zsh

Perché bash, StéphaneChazelas ha messo insieme uno script di shell per facilitare il rilevamento di quella modalità e intraprendere le azioni appropriate.

Una risposta più specifica - che impedisce alle linee di essere troncate - è senza risposta senza conoscere il programma unix in esecuzione quando si preme incolla.

Un gestore di appunti forse quello che ti serve.


Lo script dentro non rileva incolla tra parentesi, è uno script perl che emula una terza forma di incolla tra parentesi che non richiede supporto nell'applicazione diversa da quella che l'applicazione deve comprendere ^ V come litteral-next (quello script in realtà rispondere a questa domanda anche se probabilmente avrebbe bisogno di essere migliorato, era solo un PoC).
Stéphane Chazelas,

@ StéphaneChazelas sentiti libero di modificare / migliorare il mio post. :) "L'applicazione deve capire ^Vcome literal-next. Ma come ^Vsi immette nel flusso di input dell'applicazione?
Otheus,

Lo ottiene se il dispositivo tty interno non è in modalità icanon (come bashil prompt di readline lo vedrà (e tratterà come letterale-prossimo)). Se in modalità icanon, la disciplina di linea di quel dispositivo tty interno lo spoglia (fino a quando il lnextpersonaggio è ^V), proprio come quando si digita manualmente Ctrl-V X ..
Stéphane Chazelas,

1
Se non si utilizza quello script, nulla viene inserito a ^Vmeno che non si usi la quoted pastemodalità di xterm (abilitata dall'invio \e[?2005h). Questo perlscript potrebbe essere adattato in modo da rimuovere tutto tranne la prima riga in un incolla su più righe (anche se non in modo affidabile per paste di grandi dimensioni), ma com'è già, poiché cita la nuova riga per readline (come se avessi premuto Ctrl- V Ctrl-J), impedisce l'esecuzione delle linee (sono appena aggiunte al buffer di modifica e devi ancora premere Invio per eseguirle).
Stéphane Chazelas,

4
Quale seconda risposta?
Xiao,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.