Rastgele konsol çıktısının terminali kesmesi nasıl önlenir?


23

SE hakkında, terminalden nasıl kurtarılacağını gösteren birçok soru var cat /dev/urandom. Bu konuyla aşina olmayanlar için - burada ne ile ilgili:

  1. Yürütür cat /dev/urandomveya eşdeğer (örneğin, cat binary_file.dat).
  2. Çöp yazdırılıyor.
  3. Tamam olur ... terminaliniz komut tamamlandıktan sonra bile çöp yazdırmaya devam eder ! İşte aslında g ++ çıktısı olan yanlış yazılmış bir metnin ekran görüntüsü:

    Örnek ekran görüntüsü

    Sanırım insanlar C ++ hataları konusunda haklıydılar, bazen çok şifreli oluyorlardı!

Genel çözüm, stty sane && resether seferinde onu çalıştırmak biraz can sıkıcı olsa da, çalıştırmaktır.

Bu nedenle, bu soruya odaklanmak istediğim, bunun olmasının asıl sebebi ve böyle bir komut verildikten sonra terminalin kırılmasının nasıl önleneceğidir . Böyle saldırıda bulunan komutları boru olarak çözüm aramıyorum trya xxdbu çıkış bu verilere sen ne her zaman hatırlanacak gerçekte çalıştırmadan önce Program / dosyanın çıkışları ikili / yazdırmak olduğunu bilmek gerektirir ve ihtiyaçlar nedeniyle, .

Aynı davranışı URxvt, PuTTY ve Linux çerçeve arabelleğinde de fark ettim, bu yüzden bu uçbirime özgü bir sorun olduğunu sanmıyorum. Birincil şüphelim, rastgele çıkışın karakter kodlamasını çeviren bazı ANSI kaçış kodları içerdiği (aslında, eğer cat /dev/urandomtekrar çalıştırırsanız , bu teoriyi onaylıyor gibi görünecek olan uçbirimi kıracak ihtimaller var ). Bu doğruysa, bu kaçış kodu nedir? Devre dışı bırakmak için standart yollar var mı?

Yanıtlar:


22

Yok hayır:

  • "Devre dışı bırakmanın" standart bir yolu yoktur ve
  • kırılma detayları aslında terminale özgüdür, ancak
  • Yanlış davranışlarla karşılaşabileceğiniz yaygın olarak uygulanan bazı özellikler var.

Yaygın olarak uygulanan özellikler için, ^Nve tarafından ^Oetkinleştirilen (etkinleştirme / devre dışı bırakma) VT100 tarzı alternatif karakter kümesine bakın . UTF-8 modunu kullanırken Yani bazı terminallerde bastırılmış olabilir, ancak aynı terminalleri onlar çıkış sıralarını (GNU ekranında, Linux konsol, PuTTY burada konuştuğumuz) ekranınızı dayak için bol bol fırsat var tanır.

Diğer kaçış dizilerinin bazıları, örneğin terminalden bir sorguya (kaçış dizisi) ev sahibi tarafından verilen yanıtlara dayanır. Ana bilgisayar beklemiyorsa, sonuç ekranda çöp şeklindedir.

Diğer durumlarda (örneğin Linux konsolu için sabit kodlu kaçış dizileri olan ağ cihazlarında görülür), diğer terminaller bunu yanlış kodlanmış olarak görecek ve donmuş gibi görünecektir.

Yani ... sadece bir terminale odaklanabilir, rahatsız edici gibi görünen şeyleri budayabilirsiniz (örneğin, bazıları editörlerde konumlandırma için fareyi kullanma yeteneğinin kaldırılmasını önerebilir) ve görünürde açık delikleri olmayan bir şey elde edebilirsiniz. Ama bu sadece bir terminal.


0

Kontrolünüz ve bir komutun sizi sıkıştıracağını bilmesi durumunda, çıktıyı genellikle daha az gibi bir şeyde görürüm.

head -n4 /dev/urandom | less

Bu olağan çöpleri yakalayıp, aklı başında bir temsil ile bastırıyor , q ile çıktıktan sonra hatırlamadığımda hiçbir sıkıntı yaşamadım , bu da sizi daha az bırakma konusunda yabancı olduğunuzu cesaretlendirdim.


2
Özellikle soru, programın ikili çıktı ürettiğini önceden bilmenizi gerektiren çözümler aramayacağını söylüyor.
Barmar

-1

Komutunuzun vs. çıkışını tişörte geçirin -


2
Bu nasıl yardımcı olacak? Yine de çıktıyı basar, fakat aynı zamanda bir dosyaya kaydeder.
Barmar

Belki demek moreya less?
Barmar

Benim vurgu ile OP başına: "... sonra . Böyle komutu verilir ben gibi çözümlere aramıyorum boru rencide komutları"
Jeff Schaller
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.