Thiết lập lại màu sắc của thiết bị đầu cuối sau khi thoát / đăng xuất ssh


21

Khi tôi ssh vào một máy chủ từ xa, tôi thích màu sắc của thiết bị đầu cuối thay đổi. Tôi sử dụng settermtừ xa tập tin ~ / .bashrc để hoàn thành việc này. Tuy nhiên, khi tôi exit, màu thiết bị đầu cuối không được đặt lại thành màu cục bộ.

Tôi đã giải quyết vấn đề, nhưng tôi không chắc đó có phải là giải pháp tốt nhất không. Đây là những gì tôi có thể đưa ra.

Trên ~ / .bash_logout trên máy chủ từ xa, tôi đặt:

echo -e "\033[0m"
/usr/bin/clear

Chỉ tò mò thôi: Có ai biết cách nào tốt hơn không? (Tôi đã nhận được echo -e "\033[0m"dòng từ http://edoceo.com/liber/linux-bash-shell )


2
Tôi khuyên bạn nên sử dụng tputđể thay đổi màu sắc thay thế. Tìm kiếm.
Ram

Những màu sắc bạn đang thiết lập và làm thế nào? Bạn có nghĩa là dấu nhắc của bạn ( PS1)?
terdon

Câu trả lời:


37

Tốt hơn:
tput sgr0thường là tương đương vớiecho -en "\e[0m"

Sự khác biệt là việc sử dụng tput sẽ thích ứng nếu loại thiết bị đầu cuối khác với ANSI - và nó đã được thiết lập đúng.

man 5 terminfo để biết thêm mã để sử dụng.

Trong đó bạn sẽ tìm thấy 'thiết lập lại' nên tput resetsẽ hoạt động.


$ echo -e "\ e [KIỂM TRA 7m \ e [0m"  
 TEST   
$ echo -e "$ (tput rev) KIỂM TRA $ (tput sgr0)"  
 TEST   
$   

(Các bản in TEST phải được đổi màu nền / màu nền trước, không thể hiển thị ở đây - chỉ "mô phỏng")


Tìm thấy một lựa chọn khác cho điều này , một cách ít táo bạo hơn:

gói settermtiện ích linux (trên ubfox) chứa (tiện ích shell).

loại setterm --helpvà bạn sẽ tìm thấy các tùy chọn có sẵn.


Đầu ra THỰC TẾ của tput sgr0

$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<
0000006

... phụ thuộc vào cách thiết bị đầu cuối của bạn được thiết lập, ví dụ:

$ set | grep TERM
TERM=xterm-256color

cho những điều trên


$ infocmp ansi
    Được cấu trúc lại qua infocmp từ tệp: / lib / terminfo / a / ansi
ansi | ansi / pc-term tương thích với màu sắc,
    am, mc5i, mir, dirr,
    màu # 8, cols # 80, nó # 8, dòng # 24, ncv # 3, cặp # 64,
    acsc = + \ 020 \, \ 021- \ 030. ^ Y0 \ 333` \ 004a \ 261f \ 370g \ 361h \ 260j \ 331k \ 277l \ 332m \ 300n \ 305o ~ p \ 304q \ 304r \ 304s_t \ 303u \ 264 \ 301w \ 302x \ 263y \ 363z \ 362 {\ 343 | \ 330} \ 234 ~ \ 376,
    bel = ^ G, nháy = \ E [5m, đậm = \ E [1m, cbt = \ E [Z, xóa = \ E [H \ E [J,
    cr = ^ M, cub = \ E [% p1% dD, cub1 = \ E [D, cud = \ E [% p1% dB, cud1 = \ E [B,
    cuf = \ E [% p1% dC, cuf1 = \ E [C, cup = \ E [% i% p1% d;% p2% dH,
    cuu = \ E [% p1% dA, cuu1 = \ E [A, dch = \ E [% p1% dP, dch1 = \ E [P,
    dl = \ E [% p1% dM, dl1 = \ E [M, ech = \ E [% p1% dX, ed = \ E [J, el = \ E [K,
    el1 = \ E [1K, nhà = \ E [H, hpa = \ E [% i% p1% dG, ht = \ E [I, hts = \ EH,
    ich = \ E [% p1% d @, il = \ E [% p1% dL, il1 = \ E [L, ind = ^ J,
    indn = \ E [% p1% dS, invis = \ E [8m, kbs = ^ H, kcbt = \ E [Z, kcub1 = \ E [D,
    kcud1 = \ E [B, kcuf1 = \ E [C, kcuu1 = \ E [A, khome = \ E [H, kich1 = \ E [L,
    mc4 = \ E [4i, mc5 = \ E [5i, nel = \ r \ E [S, op = \ E [39; 49m,
    rep =% p1% c \ E [% p2% {1}% -% db, rev = \ E [7m, rin = \ E [% p1% dT,
    rmacs = \ E [10m, rmpch = \ E [10m, rmso = \ E [m, rmul = \ E [m,
    s0ds = \ E (B, s1ds = \ E) B, s2ds = \ E * B, s3ds = \ E + B,
    setab = \ E [4% p1% dm, setaf = \ E [3% p1% dm,
    sgr = \ E [0; 10%?% p1% t; 7%;%?% p2% t; 4%;%?% p3% t; 7%;%?% p4% t; 5%;%? % p6% t; 1%;%?% p7% t; 8%;%?% p9% t; 11%; m,
    sgr0 = \ E [0; 10m, smacs = \ E [11m, smpch = \ E [11m, smso = \ E [7m,
    smul = \ E [4m, tbc = \ E [3g, u6 = \ E [% i% d;% dR, u7 = \ E [6n,
    u8 = \ E [?% [; 0123456789] c, u9 = \ E [c, vpa = \ E [% i% p1% dd,

SEE ALSO (man pages):
       tic(1) infocmp(1), captoinfo(1), infotocap(1), toe(1),  
       ncurses(3NCURSES), term(5).  terminfo(5).

Khám phá thêm, bắt đầu ở đây có thể https://en.wikipedia.org/wiki/Terminfo
Hướng dẫn của lập trình viên về ncurses - sách google

lưu ý: ncurses cung cấp giao diện cho termcap, terminfo và tất nhiên là những lời nguyền.


echo -e "\e \033 \x1b " | od -t x1z- cái nào dễ đọc nhất?
Hannu

tput sgr0trả về một cái gì đó khác với \e[0m, nhìn vào điều này: a=$(tput sgr0); set | grep ^a=và xem kết quả. Bạn cũng có thể vui lòng cho biết setterm tùy chọn tương đương để làm \e[0mgì?
SebMa

Lưu ý rằng \e[0mhoặc bằng \e[mvới các thiết bị đầu cuối loại ANSI, tput sgr0 có thể cung cấp cho bạn một cái gì đó hoàn toàn khác nếu thiết bị đầu cuối của bạn không phải là ANSI. Bạn không thể chắc chắn ngay cả đối với các thiết bị đầu cuối ANSI, vì thiết bị đầu cuối bạn thực sự sử dụng có thể đã được thiết lập khác nhau trong cơ sở dữ liệu terminfo.
Hannu

TERM=ansi a=$(tput sgr0); set | grep ^a=và kết quả là a=$'\E[0;10m'. Điều này có vẻ khác so với\e[0m
SebMa

Đúng? "Bạn không thể chắc chắn ngay cả đối với các thiết bị đầu cuối ANSI, vì thiết bị bạn thực sự đang sử dụng có thể đã được thiết lập khác nhau trong cơ sở dữ liệu terminfo." Như bạn có thể thấy ở trên, biến thể đó có \e(B\e[m- mong đợi sự khác biệt!
Hannu

17

Tôi tin rằng bạn đang tìm kiếm lệnh "thiết lập lại"


2
Vấn đề với thiết lập lại là nó xóa tất cả nội dung của bảng điều khiển và đôi khi đó không phải là điều bạn muốn.
niglesias

3

Bạn có thể thấy việc sử dụng điều này trong điều khiển từ xa .bash_logout thích hợp hơn:

tput init

Có thể là tốt khi có điều này trên mọi .bash_logout như một cách thực hành tốt chung (và thậm chí trên ~ / .profile)


2

Nếu bạn đặt các màu bạn muốn trong tài khoản từ xa ~ / .bashrc, nó sẽ có hiệu lực khi đăng nhập và trở lại cài đặt cục bộ của bạn khi thoát.


Tôi cũng nghĩ vậy Nhưng, họ đã không trở lại khi tôi thoát ssh. Có lẽ đó là vì tôi đã sử dụng setterm trong .bashrc (sử dụng thiết bị đầu cuối Gnome). Bạn có sử dụng một phương pháp khác để thiết lập bảng màu trong .bashrc không?
dgo.a

nếu bạn đang sử dụng Gnome, tôi giả sử bạn chạy linux. Tôi sử dụng Ubuntu, nhưng tôi đoán quá trình này khá giống nhau trên các bản phát hành. Bạn có thể sao lưu tệp sau đó mở tệp trong trình soạn thảo văn bản và chỉnh sửa nội dung bắt đầu từ dòng có ghi PS1 =. Bạn có thể tìm thấy thông tin tại novell.com/coolsolutions/tools/17142.html . Nó cho bạn biết nhiều hơn bạn từng muốn biết về tệp .bashrc.
Yitzchak

1
À, không. Cài đặt thiết bị đầu cuối không dựa trên những gì bạn đang làm trong thiết bị đầu cuối. Họ (nhân hóa!) Không quan tâm nếu bạn là người địa phương, ở xa, làm việc bằng tiếng Swiêng hoặc bất cứ điều gì. Đó là một máy trạng thái đơn giản. Vì bạn đã sử dụng một lệnh để thay đổi nó thành một thứ gì đó ... bạn phải sử dụng một lệnh để thay đổi nó thành một thứ khác. Giải pháp .bash_logout là cách tốt nhất, trừ khi bạn muốn viết một bí danh / hàm để bọc các lệnh ssh của bạn. Blech. Dễ dàng hơn, làm cho các cài đặt của bạn (bất kể chúng là gì) là một phần của đầu ra nhắc PS1 của bạn. Khi bạn đăng nhập vào máy, nó sẽ thay đổi, đăng xuất, dấu nhắc cũ sẽ khôi phục.
lornix
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.