İkili bir dosya ekledikten sonra karma sembolleri (#) pound sembollerine (£) dönüştü


42

Bu benim bash istemi nasıl göründüğümdür.

eski bash istemi

Sonra muhtemelen o kadar akıllı olmayan bir şey yaptım cat /bin/bash. Ve şimdi benim bash istemim şöyle, bir hash sembolü (#) yerine pound sembolüyle (£). Dosyalar içindeki hash sembollerini bile etkiler, buraya bakınız:

dosyalarda pound sembolleri

Bunu geri almak için herhangi bir fikir?

Düzenleme: Bu soru "bash istemimi nasıl değiştiririm?" Değil, "bash istemim kendiliğinden değişti, nasıl geri yükleyebilirim?"

.bashrcİlgilenenler için tamamlayın .



1
(Soruna neden olanı ortaya çıkarmak için başlığı düzenleme özgürlüğünü kullandım. İstediğiniz gibi
düzenleyin

9
İstemi, dosya vb hala karakter kodu içeren #, \x23; o terminali şimdi yorumladığı sadece müzik \x23olarak £.
saat

4
İlginç olan, "pound" un Amerikan (ve diğer uluslardan milliyetçi) hash sembolü için başka bir isim
olduğudur.

1
Bu hangi terminal programında yapıldı?
SnoringFrog

Yanıtlar:


102

Terminal kontrol komutları olarak bir sürü farklı karakter dizisini kabul eder ve yürütür. Örneğin, tüm imleç hareketleri bunlar kullanılarak yapılır. Kodların bazıları, renkleri ayarlama veya terminale alternatif bir karakter kümesi kullanmalarını söyleme gibi kalıcı değişiklikler yapar. Yürütülebilir dosyalar ve diğer ikili dosyalar iyi bir şekilde bu komutları temsil eden baytları içerebilir, böylece ikili dosyaları terminale atmanın sinir bozucu yan etkileri olabilir. Bazı kontrol kodları için buraya bakınız .

Bunun tarihsel arka planı, başlangıçta, terminallerin ekran ve klavyeyle aptal cihazlar olduğu ve gerçek bilgisayara seri bağlantı noktası aracılığıyla bağlandıklarıdır. Ondan önce, klavyeli yazıcılardı. Veri baytlarını komut baytlarından ayıracak bir protokol yoktu, bu yüzden komutlar "inline" terminaline verildi. (Ya da daha doğrusu, kaçış kodları ve kontrol karakterleri protokoldü.) Sistem bugün tasarlanırsa, veriler ve komutlar arasında daha açık bir ayrım olacağını varsayabilir.

Bunun yerine sadece Terminal penceresini kapatmadan veya emülatörü öldürme, kullanabileceğiniz resetkomutu aklı başında varsayılan terminali geri sıfırlamak için benzer bir komutu (veya birkaç) gönderir.

Tam olarak ne paranın değişmesine neden olur bilmiyorum. (Fakat @ Random832, cevaplarını görüyor .) Tüm karakterleri çizgi çizme gliflerine dönüştüren "alternatif karakter kümesi" ile daha aşina oldum. Bu gerçekleşse bile, klavyeden giriş genellikle değişmez, bu nedenle resetEnterkarakterler çöp olarak görüntülense veya hiç gösterilmese bile yazma işlemi devam eder. (İsteğinizin bir demet çizgiye dönüşmesiyle karşılaştırıldığında, sadece küçük bir etki elde edersiniz.)


1
Ayrıntılı açıklama için teşekkür ederiz. Gerekli itibarı alır almaz oy kullanacağım.
lhermann,

2
cat /dev/urandomDebian kurulum konsolunda ilk kez denediğimde (tuğlalı donanımı akla getiren ekran çözünürlükleri), bir taşma tetiklediğimi düşündüm ve hızlı bir şekilde "tüm değişiklikleri bırak, makineyi yeniden başlat" düğmesine yöneldi. Şimdi bunun "amaçlanan bir özellik" olduğunu biliyorum.
wizzwizz4

2
Şimdi istenmeyen, tarihsel olarak amaçlanan bir özellik. Bazı (hepsi iyi) terminal emülatörleri, bir UTF-8 ortamında çalışırken eski karakter set-switch kaçışlarını devre dışı bırakmalıdır, ancak bunu yapıp yapmadıklarını ve varsayılan olarak değilse, bunu yapma seçeneğini nasıl etkinleştirdiğinizin belgelendirilmesi gerekir ve değişir.
R. ..

78

Kayıt için, bunun neden olduğunu ve terminali kapatmadan nasıl düzeltilebileceğini (ve resetbaşarısız olursa ) cevaplamak için :

Birçok terminal , taklit ettikleri VT220 terminallerinin bir özelliği olarak, ISO 646 ve ISO 2022'yi temel alan bir dizi ulusal değiştirme karakter setini desteklemektedir . Özellikle, bazı nedenlerden ötürü, diğerleri desteklenmese bile, ASCII'nin sayı işaretinin bulunduğu konumda, pound para birimi simgesi olan İngiliz karakter setini desteklemeleri çok yaygındır.

Bu yüzden, terminale bir ikili dosya yazdırdığınızda, bazı tesadüfler sonucu diziyi ESC ( A[veya belki ESC ) Ave ^N] terminale çıkarır. Bu, normal duruma ayarlayan diziyi yazdırarak el ile yapılabilir:

printf '\e(B\e)0\x0f'

Ayrıntıları bilmeden, böyle bir şey tahmin ettim. Açıklama için teşekkür ederim. Senin gibi insanlara sahip olmak harika!
lhermann,

1
Ah canım, Ä ve Ö'nin yerine martılar ... Ve OS X'deki Terminal, 2016'da bile bu değişikliği destekliyor. Eğer sadece verecek başka bir oyum olsaydı.
ilkkachu

@ilkkachu, aksi halde onları destekleyen bazı terminaller (Putty'yi biliyorum ve ayrıca Linux konsolu da olduğunu düşünüyorum) UTF-8 kullanımdayken bunları reddeder, çünkü ISO 2022 ESC % @eyalette diğer sekansların desteklenmeyeceğini söylüyor UTF-8'i desteklemek için kullanılır. Böylece, daha fazla uygulama, çizgi çizme için UTF-8'i kullanmaya zorlandıkça (bu özelliğin en yaygın kullanılanı olan gerçek kullanım olan UTF-8'i kullanmaya zorlandıkları zaman, ortadan kaybolabilirler, diğer karakter kümeleri, genellikle mekanizmayı uyguladığınızda "serbest" olduğu için dahil edilir. ].
Random832

20
Bu kaçış dizilerini hatırlamak kolaydır: "A", İngiliz anlamına gelir; "B", "Amerikan" anlamına gelir: D
egmont, 19

8
@ egmont Buna katlandım, ortaya çıktığı gibi, ISO'ya kayıtlı oldukları sırayla sırayla atandılar. İlk [eski uluslararası referans versiyonu ¤için $] şeklindedir @ ve sonra ingiliz versiyonu amerikan birinde önce almak oldu. hepsinin bir listesi için itscj.ipsj.or.jp/itscj_english/index.html .
Random832

30

Terminali kapatın ve yenisini açın.


19
Yapmamalısın. Soru geçerli. Belki birileri bunun neden olduğunu ayrıntılı bir şekilde açıklayabilir. Bu Bash'te bir delik olmalı. sadece onunla £aynı anahtarın altında oturuyor . Her nasılsa Bash'de kaldı. Her neyse, uygun bir açıklama bekleyebilir veya cevabımdan memnun kaldıysanız, kabul etmek için çeke tıklayın. #AltAlt
Tomasz

1
Ya da Bash'de değil, terminal programında. Aynı GUI dışında bir komut satırında denedim ve sonsuza kadar döngüler.
Tomasz

5
@Xalorous, o zaman sorun ortaya çıktığı sorusu devletler cated /bin/bashterminali için.
ilkkachu

2
Random832 gerçekte olanlar hakkında iyi bir açıklama yaptı
lhermann, 14

16
Bu overkill - ya oturumunuzda saklamak istediğiniz bir durum varsa? Ya bir X terminalinden çok bir konsolsa? resetiş için doğru araçtır.
pericynthion


9

stty saneolduğu gibi sorunu çözmek gibiydi reset.


7

Terminalinizi kapatıp yeniden açmanıza veya sıfırlamanıza gerek yoktur! Sıfırlama işe yarayacak olsa da, bu uygun bir yol değil!

Tek yapmanız gereken, terminal geri kaydırma tampon belleğinizi silmeniz / silmeniz gerekir . Bunu yapmak için aşağıdaki komutu kullanmanız yeterlidir:

$ echo -ne '\0033\0143'

1
Bu mucize için bir açıklamanız var mı?
Tomasz

1
@tomas Evet, kesinlikle dostum. -eEtkili olduğunda , çalıştırarak okuyabileceğiniz bazı dizileri tanır man echo, bunlardan biri \0NNNNNN sekizli değeri olan bayt anlamına gelir. Aslında, terminal oturumunuzu SIFIRLAYINIZ gerekmez, sadece geri kaydırma tampon belleğinizi TEMİZLE. Ve söylediğim komut gerekli işi yapacak. Örneğin, MacOS X kullanıyorsanız, terminal kullanırken menü çubuğundaki bir Düzenleme ve "Kaydırmayı Temizle veya ⌥⌘K" olarak bir seçenek vardır.
FarazX

5
Sıra \033\143ESC c, Başlangıç ​​Durumuna Sıfırla : "VT100'ü başlangıç ​​durumuna, yani açıldıktan sonraki durumuna döndür. Sıfırlama kendi kendine testinin gerçekleştirilmesine ve INIT H sinyalini veriyor. kısaca iddia edilmek. "
16'da

1
@deltab ESC'den bahsetmeyi unuttum, bir milyon eşe teşekkürler.
FarazX

1
@tomas Görüntülenmesi gerekmeyen bir dosyayı görüntülemeye çalıştığınızda - örneğin ikili dosyalar - terminal garip ve garip davranır. Çoğu Linux kullanıcısı sıfırlama işlemini gerçekleştirir, ancak terminal oturumunu sıfırlamaya gerek olmadığından en iyi seçenek bu değildir ve kaydırma kaydırma arabelleğinin temizlenmesi gerekir.
FarazX
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.