Ekran bash geçmişi üzerinden erişildiğinde uzun komutun başlangıcını keser


9

OS X Lion'da bash ve screen'in varsayılan sürümlerini kullanıyorum.

Bir ekran oturumunda olduğumda ve bash geçmişine geri döndüğümde, kaydırılacak kadar uzun bir komuta geliyorum.

İlk önce bazı komutlar yazabilirim:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/

Bu, yukarıda yazıldığı gibi düzgün bir şekilde sarılır, ancak bash geçmişiyle erişmek için basarsam, konsol yalnızca görüntüler:

83279836214c0.144847759343/

Yani komut istemi ve tüm ilk satırı eksik, bu da düzenlemeyi zorlaştırıyor; ilk satıra geri dönersem görünür, ancak son satırın üzerine yazar. Komutu yürüttüğümde, ilk satırın geri kalanı görüntülenir ve her şey beklendiği gibi görünüyor:

selassid@tem02:~$ ls ljmix/fiftyfifty_softsphere/T0.350/r2.43/0.565421311859c0.1
83279836214c0.144847759343/
total 1792
...
selassid@tem02:~$ 

Daha ilginç olan, uzun komuta erişmek için geçmişi kullanmam ancak henüz çalıştırmamam, C-abaşka bir pencereye geçip geri dönme gibi herhangi bir ekran komutunu kullanmanız veya mevcut terminal penceremden tıklayıp buna ek olarak, geçmiş komutu şimdi tekrar düzgün bir şekilde görüntülenir.

Benim PS1='\u@\h:\w$ 'yani orada hiçbir şey garip gidiş var.

Geçmişi kullanırken tüm komutu doğru bir şekilde göstermenin bir yolu var mı? Ekran sarma ayarlarıyla oynamayı denedim, ancak sadece işleri daha da kötüleştiriyorlar.

stty -a gösterileri:

speed 9600 baud; 46 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
    -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
    -extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
    -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
    -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
    min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
    stop = ^S; susp = ^Z; time = 0; werase = ^W;

Ekranın içindeyken yankı $ TERM yapabilir ve çıktı sağlayabilir misiniz? Ayrıca, tput am; echo $ ?, ne alıyorsun?
Patrick

TERMolduğunu xterm-256colorve tput am; echo $?sadece bana 0. verir
selassid

Ayrıca, bu yalnızca bir pencerenin altındaki geçmişte kaydırma yaptığınızda olur, bu nedenle metnin tümü, geçmişinizdeki komutun ikinci satırını göstermek için yukarı hareket etmek zorunda kalır.
selassid

Çıktısı nedir stty -a?
Andy Smith

Gönderinin altına ekledim. Ekran çalışmadığında çıktı ile eşleşir.
selassid

Yanıtlar:


1

Yukarıdaki yoruma verilen cevaba dayanarak, başlangıç ​​komut dosyalarınızdan birinde TERM'yi geçersiz kıldığınız anlaşılıyor. Ekranın içindeyken, TERM'iniz 'xterm-256color' yerine 'screen' olarak ayarlanmalıdır.

Kabuk başlangıç ​​komut dosyalarınıza bakarım. ~ / .bashrc, / etc / bash / bashrc ve muhtemelen her şeyi nasıl ayarladığınıza bağlı olarak ~ / .bash_profile ve / etc / profile gibi diğerleri. Herhangi bir TERM = "..." ayarı görürseniz, bunları kaldırmanız gerekir.


Bu doğruydu, ancak bunları kaldırdıktan ve TERM'in ekranın içinde "ekran" olup olmadığını kontrol etseniz bile sorunu çözmez.
selassid

~ / .İnputrc veya / etc / inputrc var mı? Öyleyse, yatay kaydırma modunun ayarlanmadığından veya kapalı olarak ayarlandığından emin olun.
Patrick

Bir ~ / .inputrc var, ancak yatay kaydırma modu ayarlanmamış ve kapalı olarak ayarlamak davranışı değiştirmez. Girdi-meta ve çıktı-meta açık ve convert-meta kapalı var, ama bu ayarları kaldırmak davranışı değiştirmez.
selassid
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.