Tùy chỉnh bash shell: In đậm / tô màu lệnh


13

Có một số hướng dẫn / bài đăng trực tuyến (ví dụ: http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ ) về cách tùy chỉnh lời nhắc của bạn trong bash bằng cách cài đặt PS1. Có cách nào để tùy chỉnh màu sắc / độ đậm của lệnh tôi gõ không?

Nói cách khác, như một ví dụ cho phép tôi muốn có dấu nhắc màu xanh lá cây, lệnh màu xanh đậm và sau đó xuất ra bất kỳ màu nào sẽ được mặc định. Trong ví dụ dưới đây, tôi đã biết cách joe>hiển thị "" dưới dạng xanh lục, xanh lam, đậm, bất cứ điều gì bằng cách cài đặt PS1. Nhưng có cách nào để tôi thể hiện sự git statustáo bạo chẳng hạn?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...

Nếu bạn muốn có một lớp vỏ thực sự tốt, bạn nên sử dụng zsh, những gì bạn muốn đạt được sẽ rất đơn giản vớipreexec() { printf '\e[0m' }
bollovan

3
@bollovan - 'Thực sự tốt' là một chút chủ quan, tôi thấy nó thực sự đáng ghét vì sự không tuân thủ và POSIX của nó. Nhưng, bất cứ điều gì nổi thuyền của bạn.
Chris Xuống

@ChrisDown phình to thuyền của bạn - không bao giờ nghe thấy nó, khá thú vị.
n611x007

Câu trả lời:


13

Bạn sẽ phải để lại dấu vết màu sau PS1 (khởi động nó sau >trong ví dụ của bạn), sau đó sử dụng DEBUGbẫy bash để xóa màu trước khi lệnh của bạn được chạy (nhưng sau khi bạn nhấn enter trong shell của bạn. Hãy thử một cái gì đó như thế này :

shopt -s extdebug
trap "tput sgr0" DEBUG

đối với người lạ thoát mã: điều này có giữ được màu gốc của lệnh (ví dụ: sẽ ls --color=alwaysđược tô màu) không?
n611x007

@naxa - Có, vì điều này đặt rõ ràng các mã màu (ngoại trừ các màu được tô màu theo màu thiết bị đầu cuối mặc định, sẽ chỉ có hiệu lực sau màu đầu tiên).
Chris Xuống

Thủ thuật này dường như can thiệp vào việc hoàn thành tab (in những thứ kỳ lạ như ^[(B^[[m). Tuy nhiên, điều này chỉ xảy ra trên một số hệ thống: Tôi đã thử nghiệm điều này trên hai hệ thống, cả hai đều chạy Ubuntu 12.04 LTS và chỉ một trong số chúng có nhiễu.
musiphil

7

Để hoàn thiện, đây là cách đặt màu nhắc và màu đầu vào dòng lệnh trong bash. Đặt những dòng này trong của bạn .bashrc.

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

Bẫy DEBUG, theo đề xuất của Chris Down , được sử dụng để đặt lại các thuộc tính văn bản. Nó có nghĩa là để gỡ lỗi, nhưng nó cũng hữu ích để thực thi mã trước khi thực hiện lệnh được gõ bởi người dùng .

Trong cài đặt nhắc nhở:

  • \[…\] được sử dụng xung quanh các chuỗi thoát để nói với bash rằng chúng không sử dụng bất kỳ bất động sản màn hình nào (nếu không có chúng, màn hình sẽ bị cắt xén khi bash cần vẽ lại dấu nhắc).
  • \e[…mtrong đó một số, hay nói chung là một dãy số được phân tách bằng dấu chấm phẩy, là một chuỗi thoát được gửi đến thiết bị đầu cuối để ảnh hưởng đến màu sắc và các thuộc tính khác của văn bản sau. Ví dụ, 1;34đặt màu xanh đậm; 0;32Đặt lại tất cả các thuộc tính sau đó chuyển màu sang màu xanh lá cây. Điều chỉnh theo khẩu vị.
  • \w\$in thư mục hiện tại và $hoặc #. Tất nhiên bạn có thể thay đổi điều này thành bất cứ điều gì bạn thích và chèn các thay đổi thuộc tính văn bản vào giữa nếu bạn muốn.
  • Có một sự thay đổi thuộc tính cuối cùng ở cuối, trong đó thiết lập màu của kiểu nhập văn bản.

FYI, mã / chuỗi màu bash có thể được tìm kiếm ở đây: misc.flogisoft.com/bash/tip_colors_and_formatted
kaiwan

0

Tôi chỉ đang tìm hiểu về các lệnh BASH và tôi đã ngồi đây chơi với các lệnh màu trong phiên bản của mình. Tôi đã tìm ra giải pháp này:

Sử dụng lệnh này:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

Giải mã: PS1 =: bắt đầu lệnh PS1

'': chứa lệnh trong các trích dẫn đơn (vì vậy BASH không nghĩ đó là lệnh cho nó)

\: mỗi lệnh riêng lẻ bắt đầu bằng điều này

[]: chứa mỗi lệnh

\ e (cũng có thể là \ 033 ký tự thoát ASCII): bắt đầu lệnh màu

Lệnh màu đi trước điều nó áp dụng.

[\ e [0; 36m]: màu lục lam

\ h: tên máy chủ

'>': được in sau tên máy chủ

[\ e [0; 31m]: đỏ

Rõ ràng, lệnh màu đỏ ở cuối làm cho đầu vào màu đỏ. Chỉ cần thay đổi màu sắc theo ý thích của bạn và đó là những gì bạn đang tìm kiếm.

Ngoài ra, trang web này đã giúp tôi một chút:

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

Phiên bản của tôi: GNU bash, câu 4.2.46

Bảo trọng,

Chồn

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.