Ekran odcina początek długiego polecenia, gdy jest dostępny w historii bash

9

Używam domyślnych wersji bash i screena w OS X Lion.

Kiedy jestem w sesji ekranowej i przewijam historię bashu, dochodzę do polecenia, które jest wystarczająco długie, aby je zawinąć.

Mógłbym najpierw wpisać jakieś polecenie:

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

To poprawnie się opakowuje, jak napisano powyżej, ale jeśli nacisnę przycisk, aby uzyskać dostęp do historii bash, konsola wyświetli tylko:

83279836214c0.144847759343/

Brakuje zatem monitu i całego pierwszego wiersza polecenia, co utrudnia edycję; jeśli przewiń z powrotem do pierwszego wiersza, pojawi się, ale nadpisze ostatni wiersz wyniku. Kiedy wykonuję polecenie, wyświetlana jest reszta pierwszego wiersza i wszystko wygląda zgodnie z oczekiwaniami:

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

Co ciekawe, jeśli korzystam z historii, aby uzyskać dostęp do długiego polecenia, ale jeszcze go nie wykonuję, użyj dowolnego C-apolecenia ekranowego, na przykład przełączając się na inne okno, a następnie z powrotem, lub jeśli kliknę poza okno mojego bieżącego terminalu i z powrotem do niego, polecenie historii jest teraz poprawnie wyświetlane.

Mój, PS1='\u@\h:\w$ 'więc nie dzieje się tam nic dziwnego.

Czy istnieje sposób, aby poprawnie wyświetlić całe polecenie podczas korzystania z historii? Próbowałem grać z ustawieniami zawijania ekranu, ale tylko pogarszają sytuację.

stty -a przedstawia:

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;
selassid
źródło
Czy możesz wykonać echo $ TERM, gdy jesteś na ekranie i podać wynik? Ponadto, jeśli uruchomisz tput am; echo $ ?, co dostajesz?
Patrick
TERMjest xterm-256colori tput am; echo $?właśnie daje mi 0.
selassid
Dzieje się tak również wtedy, gdy przewijasz historię w dolnej części okna, więc cały tekst musiałby się przesunąć w górę, aby wyświetlić drugą linię polecenia w historii.
selassid,
Jaka jest wydajność stty -a?
Andy Smith
Dodałem go na dole wpisu. Dopasowuje to, co jest wyświetlane, gdy ekran nie jest uruchomiony.
selassid,

Odpowiedzi:

1

Na podstawie odpowiedzi na powyższy komentarz wygląda na to, że zastępujesz TERM w jednym ze swoich skryptów startowych. Wewnątrz ekranu twój TERM powinien być ustawiony na „screen”, a nie „xterm-256color”.

Przejrzałbym twoje skrypty startowe powłoki. ~ / .bashrc, / etc / bash / bashrc i ewentualnie inne, takie jak ~ / .bash_profile i / etc / profile, w zależności od tego, jak wszystko skonfigurowałeś. Jeśli zobaczysz jakieś ustawienia TERM = „...”, musisz je usunąć.

Patrick
źródło
To prawda, ale nawet po ich usunięciu i sprawdzeniu, czy TERM jest „ekranem” wewnątrz ekranu, nadal nie rozwiązuje problemu.
selassid
Czy masz plik ~ / .inputrc lub / etc / inputrc? Jeśli tak, upewnij się, że tryb przewijania w poziomie nie jest ustawiony lub że jest wyłączony.
Patrick
Mam ~ / .inputrc, ale tryb przewijania w poziomie nie jest ustawiony, a ustawienie go na off nie zmienia zachowania. Mam włączone meta wejściowe i wyjściowe meta i wyłączone meta konwersji, ale usunięcie tych ustawień nie zmienia zachowania.
selassid