bash'da çok satırlı macunu önlemek


10

Sıklıkla ctrl+cbazı gui uygulamalarından metin kopyalayıp sağ fare tıklatma menüsünü ve yapıştırmayı kullanarak terminal öykünücüme (sonlandırıcı) yapıştırmak için kullanıyorum. Bazen panonun bash içine yapıştırıldığında her satırın "yürütülmesine" neden olan birkaç satır içerdiğini unutuyorum

Çok hatlı macunu tamamen önlemek için bir çözüm var mı?


neye sahip olduğunuzu görmek için önce not defterine yapıştırın, sonra sorun yoksa uygulamanıza yapıştırın
Skaperen

1
bash komutunu çalıştırın ve sleep 999999tamam görünüyorsa yapıştırmayı yapın. uyku komutu satırları okumaz ve tuşuna bastığınızda atılır ctrl+c.
Skaperen



1
@Otheus, printf '\e[?2004h'çoğu xterm benzeri terminal öykünücüsünde, terminalin yapıştırılan metni parantez içinde yapıştırılmış bir yapıştırma modunu etkinleştirir, böylece uygulamalar macunun nerede başladığını ve nerede bittiğini algılayabilir. xterm, \e[?2005hyapıştırılan tüm karakterlerin öneklerinin bulunduğu başka bir modu da destekler ^V(birçok uygulama ve tty satırı disiplini tarafından anlaşılır litteral-next).
Stéphane Chazelas

Yanıtlar:


5

Bu cevap, kullanıcının sorusu için en belirgin değil Lütfen 2. cevabımı inceleyin. Bunu burada bırakıyorum çünkü daha genel konuya değiniyor .

Orijinal yazılan yorumların gereğince, (1) bir terminal emülatörü destekleri gerek hangi yapıştırmak parantez ve (2), terminalde çalışan ne olursa olsun gelen desteği yani vim, bash, zsh. Basamalı macunu destekleyen terminal emülatörleri (bu yazının yorumlarına dayanarak güncellenecek liste):

  • xterm - dan beri ??
  • gnome-terminal - dan beri ??
  • putty - 0.63'ten beri (2013-08-06 çıkış tarihi)

Basamaklama modunu destekleyen uygulamalar:

  • vim
  • zsh

Çünkü bashStéphaneChazelas, bu modun algılanmasını kolaylaştırmak ve uygun işlemi yapmak için bir kabuk betiği hazırladı .

Daha özel bir cevap - çizgilerin kesilmesini önleme - macunu vurduğunuzda çalışan unix programını bilmeden cevapsızdır.

Bir pano yöneticisi belki de ihtiyacınız olan şey.


Komut dosyası orada parantez macunu algılamaz, bir olan perl ^ (edebî-gelecek o komut dosyası olarak V olur anlamak için uygulama ihtiyaçlarına dışındaki uygulamada destek gerektirmez parantez macunun bir 3. formunu taklit komut aslında bu soruyu cevaplansa da muhtemelen iyileştirilmesi gerekiyordu, sadece bir PoC idi).
Stéphane Chazelas

@ StéphaneChazelas yazımı düzenlemek / geliştirmek için çekinmeyin. :) "uygulama ihtiyaçları anlamak ^Volarak literal-nextAma nasıl oluyor. ^VUygulamanın giriş akışı içine get?
Otheus

Eğer tty cihazı icanon modunda değilse bunu elde eder ( bashreadline'ın istemi onu görecek (ve sonraki gibi değişecektir)). Eğer icanon modunda ise, o iç tty cihazının çizgi disiplini ( lnextkarakter olduğu sürece ^V), Ctrl-V X'i manuel olarak yazdığınızda olduğu gibi
şeritleyecektir

1
Bu komut dosyasını ^Vkullanmazsanız, xterm quoted pastemodunu kullanmadığınız sürece hiçbir şey eklenmez (göndererek etkinleştirilir \e[?2005h). Yani perlsenaryo hepsi kaldırır ama o kadar adapte edilebilecek bir çok satırlı macun ilk satır (değil güvenilir büyük Hamur için gerçi) ama çünkü zaten olduğu gibi tırnak Eğer Ctrl- basılı sanki (taleb için yeni satır V Ctrl-J), satırların yürütülmesini engeller (bunlar yalnızca düzenleme arabelleğine eklenir ve bunları yürütmek için Enter tuşuna basmanız gerekir).
Stéphane Chazelas

4
İkinci cevap nedir?
Xiao
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.