Màn hình cắt bắt đầu lệnh dài khi được truy cập thông qua lịch sử bash


9

Tôi đang sử dụng các phiên bản mặc định của bash và màn hình trong OS X Lion.

Khi tôi đang ở trong một phiên màn hình và tôi cuộn qua lịch sử bash và tôi đến một lệnh đủ dài để gói.

Trước tiên tôi có thể gõ một số lệnh:

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

Điều đó kết thúc đúng như đã viết ở trên, nhưng nếu tôi nhấn lên để truy cập nó qua lịch sử của bash, bảng điều khiển chỉ hiển thị:

83279836214c0.144847759343/

Vì vậy, dấu nhắc và toàn bộ dòng đầu tiên của lệnh bị thiếu, điều này gây khó khăn cho việc chỉnh sửa; nếu tôi cuộn trở lại dòng đầu tiên, nó sẽ xuất hiện nhưng nó ghi đè lên dòng đầu ra cuối cùng. Khi tôi thực thi lệnh, phần còn lại của dòng đầu tiên được hiển thị và mọi thứ trông như mong đợi:

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

Điều gây tò mò hơn là, nếu sử dụng lịch sử để truy cập lệnh dài nhưng tôi chưa thực hiện nó, thì hãy sử dụng bất kỳ C-alệnh màn hình nào , như chuyển sang cửa sổ khác rồi quay lại hoặc nếu tôi nhấp ra khỏi cửa sổ thiết bị đầu cuối hiện tại của mình và trở lại nó, lệnh lịch sử bây giờ được hiển thị lại một lần nữa.

Tôi PS1='\u@\h:\w$ 'không có gì lạ xảy ra ở đó.

Có cách nào để hiển thị chính xác toàn bộ lệnh khi sử dụng lịch sử không? Tôi đã thử chơi với các cài đặt bọc màn hình, nhưng chúng chỉ làm mọi thứ tồi tệ hơn.

stty -a trình diễn:

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;

Bạn có thể lặp lại $ TATE khi bên trong màn hình và cung cấp đầu ra không? Ngoài ra, nếu bạn chạy tput am; echo $?, bạn nhận được gì?
Patrick

TERMxterm-256colortput am; echo $?chỉ cho tôi 0.
selassid

Ngoài ra, điều này chỉ xảy ra khi bạn cuộn qua lịch sử ở dưới cùng của cửa sổ, vì vậy tất cả các văn bản sẽ phải di chuyển lên để hiển thị cho bạn dòng thứ hai của lệnh trong lịch sử của bạn.
selassid

Đầu ra của stty -acái gì?
Andy Smith

Tôi đã thêm nó vào dưới cùng của bài viết. Nó phù hợp với những gì là đầu ra khi màn hình không chạy.
selassid

Câu trả lời:


1

Dựa trên câu trả lời cho nhận xét ở trên, có vẻ như bạn đang ghi đè TATE trong một trong các tập lệnh khởi động của bạn. Trong khi ở bên trong màn hình, TATE của bạn phải được đặt thành 'màn hình', không phải 'xterm-256color'.

Tôi sẽ xem qua các kịch bản khởi động shell của bạn. ~ / .bashrc, / etc / bash / bashrc, và có thể những người khác như ~ / .bash_profile và / etc / profile tùy thuộc vào cách bạn thiết lập mọi thứ. Nếu bạn thấy bất kỳ cài đặt TERM = "..." nào, bạn cần xóa những cài đặt đó.


Điều đó là đúng, nhưng ngay cả sau khi loại bỏ chúng và kiểm tra xem TERM có "màn hình" bên trong màn hình vẫn không khắc phục được sự cố.
selassid

Bạn có ~ / .inputrc hoặc / etc / inputrc không? Nếu vậy, hãy đảm bảo rằng chế độ cuộn ngang không được đặt hoặc nó được đặt thành tắt.
Patrick

Tôi có ~ / .inputrc, nhưng chế độ cuộn ngang không được đặt và đặt thành tắt sẽ không thay đổi hành vi. Tôi có đầu vào meta-meta và đầu ra-meta và chuyển đổi-meta tắt, nhưng loại bỏ các cài đặt đó không làm thay đổi hành vi.
selassid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.