Tôi có thể sử dụng lệnh nào để thiết lập lại và xóa thiết bị đầu cuối của mình?


64

Tôi đã sử dụng lệnh:

reset

để xóa thiết bị đầu cuối của tôi. Mặc dù tôi khá chắc chắn rằng đây không phải là điều tôi nên làm. Đặt lại, như tên cho thấy, đặt lại toàn bộ thiết bị đầu cuối của bạn (thay đổi nhiều thứ). Đây là những gì tôi muốn:

Tôi về cơ bản muốn sử dụng lệnh clear. Tuy nhiên, nếu bạn xóa và sau đó cuộn lên, bạn vẫn nhận được hàng tấn thứ từ trước đó. Nói chung, đây không phải là một vấn đề, nhưng tôi đang xem các bản ghi tổng thể dài và tôi muốn chắc chắn rằng tôi chỉ đang xem bản ghi gần đây nhất. Tôi biết rằng tôi có thể sử dụng morehoặc một cái gì đó tương tự nhưng tôi thích cách tiếp cận này.


dường như có rất nhiều nhầm lẫn về chính xác những gì đang được hỏi ở đây. bạn có thể làm rõ câu hỏi nào không? chính xác những gì bạn đang cố gắng để thực hiện, xóa bộ đệm cuộn thiết bị đầu cuối của bạn? (nếu vậy, bạn đang sử dụng ứng dụng thiết bị đầu cuối nào?)
quack quixote

1
Ctrl-L sẽ xóa màn hình trong bash (ở chế độ emacs, mặc định), tương tự như thực hiện chương trình xóa.

Chỉ cần thử nghiệm điều này trong thiết bị đầu cuối bash trong IntelliJ IDE. Hoạt động tốt và xóa cuộn ngược lại, đó chính xác là những gì tôi muốn. Cảm ơn.
Ian Lewis

Tôi biết điều này đã được trả lời cho đến chết, nhưng tôi nghĩ những gì bạn muốn là clear && printf '\033[3J'. Không thiết lập lại thiết bị đầu cuối, chỉ xóa văn bản trên màn hình. Xem bài đăng này: superuser.com/questions/555554/
Mạnh

Câu trả lời:


57

Bộ đệm cuộn không phải là một tính năng của bash mà là của chương trình đầu cuối. Bạn đã không nói những gì bạn sử dụng thiết bị đầu cuối.

Nếu bạn đang sử dụng xterm, bạn có thể xóa các dòng đã lưu bằng cách lặp lại ESC-c đến thiết bị đầu cuối.

Điều này có thể hoặc không thể hoạt động trên bất kỳ chương trình thiết bị đầu cuối nào bạn đang sử dụng.

Trên linux, điều này có thể sẽ hoạt động:

echo -e '\0033\0143'

trên FreeBSD echo không chấp nhận -e vì vậy bạn có thể thử:

printf '\033\143'

Tôi đang sử dụng xterm. Tuy nhiên tôi không hiểu ý của bạn. Tôi có nên gõ chữ echo ESC-c?
Sixty feetersdude 23/03

2
@sixtyfootersdude: Không, không phải là nghĩa đen ESC. Đọc các bài viết "Ký tự thoát" và "Ký tự điều khiển" trên Wikipedia - ESCthường được sử dụng để biểu thị ký tự ASCII 0x1B, mà bạn có thể chèn bằng cách nhấn ^Vtheo sau Esc.
grawity

1
Bạn không nên. Nếu giải pháp của bạn liên quan đến việc viết trình tự thoát thiết bị đầu cuối thô, bạn nên suy nghĩ lại về giải pháp. Tôi sẽ sử dụng "ít" thay vì mèo. Nếu bạn thực sự muốn tìm hiểu về "trình tự thoát thiết bị đầu cuối", Google có thể giúp bạn.
Craig

2
@HaraldNordgren tốt hơn là sử dụng printf tiêu chuẩn hơn echo -e.
Người tốt

3
Tại sao \0143thay vì c?
ruakh

51

Sử dụng công cụ phù hợp cho từng công việc:

  • Sử dụng clearđể xóa cửa sổ terminal.

  • Sử dụng resetđể thiết lập lại thiết bị đầu cuối của bạn khi nó bị rối bởi các chuỗi điều khiển.

  • catChỉ sử dụng khi bạn muốn truyền toàn bộ nhiều dữ liệu từ nơi này sang nơi khác không bị gián đoạn .

  • Sử dụng chương trình máy nhắn tin như lesshoặc mostđể xem các trang đầu ra.

  • Sử dụng tail -f /var/log/foo.log /var/log/bar.logđể xem một số tệp nhật ký khác nhau.

    • Với GNU tail, -Ftùy chọn này tốt hơn bởi vì nó có thể tiếp tục theo dõi tệp ngay cả khi một tệp mới xuất hiện ở vị trí của nó, như thường thấy đối với các tệp nhật ký.

14
Điều này không thực sự trả lời câu hỏi của tôi.
Sixty feetersdude 23/03

7
Vâng nó làm. Đừng tập tin con mèo để đọc chúng, tập tin con mèo để nối chúng. Sử dụng ít hoặc nhiều để đọc tệp - sau đó bạn không gặp vấn đề tương tự.
Rich Bradshaw

Tra cứu "việc sử dụng mèo vô dụng"
galois

Nhiều người phản đối việc sử dụng catđể đọc bất cứ thứ gì, nhưng đối với các tệp nhỏ, nó thực sự có ý nghĩa với cathọ hơn là sử dụng less. Khi tệp đã được chuyển ra thiết bị đầu cuối, bạn có thể nhìn / cuộn trở lại tệp bao nhiêu lần tùy ý, thay vì phải loại bỏ lesstrước khi bạn làm bất cứ điều gì khác.
GKFX

22

Chỉ để cung cấp câu trả lời kỹ thuật: resetkhởi động lại thiết bị đầu cuối, như thể nó được mở lại từ đầu. stty sanesẽ thực hiện rất nhiều chức năng tương tự (không cần thiết lập lại). Đây là điều tương tự như ^L(Ctrl + L) (irc) và tput clear. Mặc dù những gì người đăng trước đó (@grawity) đã nói, clearkhông tạo ra một loạt các dòng mới. Nó gửi TERMthiết lập lại như được định nghĩa trong terminfohoặc termcap, đối với tôi, bằng cách sử dụng gnome-terminal(xterm), nó giống như lệnh perl -e'print "\33[H\33[2J"'.

Nếu bạn muốn xóa bộ đệm - so với việc đặt lại toàn bộ thiết bị đầu cuối, hãy thử điều này tput reset. Nó sẽ rất nhanh, và làm những gì bạn muốn. (Mặc dù bạn thực sự nên đọc tệp với less)

tput reset, gửi giá trị terminfo để đặt lại - trên thiết bị đầu cuối của tôi (xterm), nó giống như perl -e'print "\33c"'


1
Tôi không nói clearđầu ra một loạt các dòng mới. Tôi chỉ cung cấp một lệnh thay thế cho nó, bởi vì clearchỉ xóa màn hình chứ không xóa bộ đệm cuộn lại. (Không phải trong PuTTY hoặc Konsole, ít nhất.)
grawity 23/03

1
Vì lý do đó, việc in một loạt các dòng mới không thực sự là một giải pháp thay thế rõ ràng - bạn không biết thiết bị đầu cuối sẽ làm gì với tín hiệu rõ ràng. Tốt hơn là chỉ cần nói với những người mới mà bạn có cơ sở dữ liệu biết cách xử lý thiết bị đầu cuối của mình, nó có hai giá trị khóa, ánh xạ clearlà tên tín hiệu thành tín hiệu và một cơ sở ánh xạ resettới tín hiệu - và chỉ sau kết quả trong một bộ đệm cuộn trở lại xóa. resetgửi cái sau, ở trên làm những thứ vui vẻ khác.
Evan Carroll

1
Theo câu hỏi ban đầu của sixtyfootersdude, clearkhông không reset scrollback mình. ( ESC choạt động trong xtermvà dựa trên VTE, nhưng không phải trong PuTTY và Konsole.) Anh ấy không muốn sử dụng reset, vì nó đặt lại nhiều hơn anh ấy muốn. (Tôi không biết anh ta sử dụng thiết bị đầu cuối nào - nhưng so sánh sttytrước và sau khi đặt lại.)
grawity 23/03

2
như tôi đã nói, anh ta có thể muốn tput reset, nó sẽ gửi tín hiệu đặt lại đến thiết bị đầu cuối - mà không thực sự xác định lại thuật ngữ. "đặt lại - Thay vì đưa ra các chuỗi khởi tạo, các chuỗi đặt lại của thiết bị đầu cuối sẽ là đầu ra nếu có (rs1, rs2, rs3, rf). Nếu không có chuỗi đặt lại, nhưng các chuỗi khởi tạo sẽ là đầu ra. Nếu không, thiết lập lại hành vi giống hệt với init. " Ở đây, chúng tôi đã thiết lập lại chuỗi để chuỗi init không chạy.
Evan Carroll

+1: cho đề xuất, tuy nhiên tput resetkhá chậm (giống như reset). printf '\033\143'nhanh hơn nhiều Có bất kỳ lý do tại sao phương thức printf là nguy hiểm / xấu?
Sixty feetersdude 26/03

9

Một thiết bị đầu cuối khác là iTerm2 và nó có một chuỗi thoát hơi kỳ lạ được sử dụng để xóa cuộn. Trong shell Bash, tôi sử dụng một cái gì đó như:

echo -ne '\033]50;ClearScrollback\a'

trong một kịch bản. Về cơ bản, đó là một ký tự ESC, theo sau là " ]50;ClearScrollback" và sau đó là ký tự BEL.


1
CMD + K hoạt động trong iTerm2. CTRL + K hoạt động trong rất nhiều người khác.
blockloop

Tôi thích giải pháp này vì nó cho phép tôi xóa bộ đệm cuộn iTerm2 khỏi tập lệnh shell, khi mọi thứ thích clearresetkhông. Đây thực sự không phải là câu trả lời tốt nhất cho câu hỏi. Tôi nghĩ rằng câu trả lời đúng cho trường hợp đó là bất cứ điều gì mà ứng dụng đầu cuối cung cấp, như lệnh-K trong iTerm2, control-K ở những người khác, v.v.
LS

8

Có lẽ cách tốt nhất để xóa mọi thứ là sử dụng chức năng của thiết bị đầu cuối:

  • Konsole: Ctrl+ Shift+ KXem → Xóa Scrollback và Đặt lại
  • Thiết bị đầu cuối Gnome: Chỉnh sửa → Đặt lại và xóa
  • PuTTY: Ctrl+ right-click→ Xóa cuộn ngược

Bằng cách này, cả hai bộ đệm đều bị xóa sạch và trạng thái đầu cuối được đặt lại chính xác như lúc khởi động (có thể giống hoặc không giống như sử dụng reset).


Hmm, tôi không có điều đó dưới gnome của mình ...
Sixty feetersdude 26/03

@sixtyfootersdude: Tôi chắc chắn rằng nó ở đó, tôi chỉ không biết menu chính xác (không thể sử dụng gnome-terminalbản thân mình vào lúc này) ... Hãy nhìn vào "Tools" và các menu khác.
grawity

Trong xterm, nút giữa của ctrl -> "đặt lại và xóa các dòng đã lưu"
Craig

3
ít -W + F foo.log

+Flà để "theo dõi", tương tự tail -fnhưng cho phép bạn cũng cuộn lại.

Tất cả các thiết bị đầu cuối dựa trên vte (Gnome, Xfce, Roxterm) và KDE Konsole cho phép bạn sử dụng bánh xe cuộn để cuộn bên trong less. Tôi thấy rằng khá thuận tiện.


Thay thế cho clear:

perl -e 'in "\ n" x512;'

xterm -e 'đuôi -f foo.log'

3

Trên Mac OS X Terminal.app:

Xem -> Xóa cuộn lại (hoặc command- K)


@Rohit Nếu câu hỏi cụ thể về Mac OS X Terminal.app, thì, vâng, đây là một câu trả lời tuyệt vời. Tuy nhiên, câu hỏi ban đầu là mơ hồ, tốt nhất tôi có thể nói, liên quan đến thiết bị đầu cuối và hệ điều hành nào đang chơi.
David J.

2

Đây không phải là vấn đề "Bash". Nó phụ thuộc vào thiết bị đầu cuối bạn sử dụng. Ví dụ, tôi sử dụng "iterm2" với macbook để kết nối máy linux từ xa. Bạn có thể sử dụng "lệnh + K" để xóa bộ đệm hoặc trong menu, chọn "Chỉnh sửa" -> "Xóa bộ đệm".


1

Để xóa màn hình bảng điều khiển và bộ đệm cuộn khi chạy PuTTY, điều này hoạt động với tôi:

echo -en "\ec\e[3J"

Đây thực sự là 2 chuỗi "Esc" hoạt động độc lập ... chúng có thể được sử dụng theo một trong hai thứ tự:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

Sử dụng echo -en "\ec"thiết lập lại thiết bị đầu cuối có thể thay đổi một số cài đặt thiết bị đầu cuối khác của bạn. Thay vì "Đặt lại", bạn có thể làm điều này:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Bạn có thể đặt nó trong một kịch bản shell và nó hoạt động tốt.


Trong trường hợp có một số phụ thuộc hệ thống:

Tôi đang sử dụng Trình quản lý kết nối PuTTY (Phiên bản 0.7.1 BETA (bản dựng 136)), với PuTTY (Phiên bản 0.60).

Đánh máy:

echo \"$TERM\"; /bin/sh --version

báo cáo:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...

1

Để làm sạch bộ đệm màn hình cho TTY phần cứng trong FreeBSD, bạn có thể sử dụng "vidcontrol - tiện ích cấu hình và điều khiển bảng điều khiển hệ thống" với tham số -C Xóa bộ đệm lịch sử.

vidcontrol -C

lệnh sẽ xóa hết bộ đệm màn hình cho giao diện điều khiển hiện tại, trên mức bạn thấy hiện tại. Bạn có thể muốn 'xóa' trước, hoặc không - tùy thuộc vào bạn.


0

Nếu bạn muốn chắc chắn rằng bạn đang xem các mục gần đây nhất trong tệp nhật ký, có lẽ tốt nhất là sử dụng đuôi thay vì clear/ catmà tôi cho rằng bạn đang sử dụng.


Trên thực tế tôi đang sử dụng tail -f (nhật ký liên tục) tuy nhiên vì đôi khi chúng phun ra hàng ngàn dòng, điều quan trọng là phải cuộn lại. Tuy nhiên, thật tuyệt khi biết rằng tôi không cau có với một bản ghi cũ.
Sixty feetersdude 23/03

0

Hừm. Tôi đoán nếu bạn đang chạy konsole, bạn không gặp may. Nó được sử dụng để bạn có thể chỉ "xóa cuộn". Konsole sẽ không cho phép bạn làm điều đó nữa. Bạn cũng phải thiết lập lại nó, vì vậy nó sẽ giết bất kỳ chương trình nào bạn đang chạy. Tôi đoán tôi cần một chương trình thiết bị đầu cuối mới ......

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.