Làm cách nào để dừng màu bash shell PS1 để dừng ở cuối lệnh?


12

Tôi có một màu PS1 tùy chỉnh trong đó tôi có các lệnh shell thực tế trong một màu riêng biệt, để tôi có thể nhanh chóng xem các lệnh tôi đã nhập và tách nó khỏi chính đầu ra lệnh.

Giả sử màu trong PS1 được đặt thành 'màu xanh' cho dấu nhắc lệnh và màu mặc định trong vỏ của tôi là màu trắng.

  • Tôi gõ một lệnh, ví dụ ls, (ls -l có màu xanh lam)
  • Đầu ra mà nó tạo ra, dòng đầu tiên vẫn có màu xanh
  • Tất cả các dòng còn lại có màu trắng

Những gì tôi muốn là tất cả đầu ra sau khi lệnh là 'trắng'.

Một vi dụ khac:

  • Tôi gõ lệnh 'cat', màu xanh lam
  • Đầu ra đến, toàn bộ đầu ra là màu xanh

Tôi muốn đầu ra là 'trắng' trong khi vẫn giữ dấu nhắc lệnh tôi đã gõ 'màu xanh'

Trên một số lệnh, nó ổn, các lệnh khác, cùng màu tràn vào dòng đầu tiên của đầu ra và sau đó màu mặc định bắt đầu và một số lệnh khác, toàn bộ đầu ra (ví dụ cat) có cùng màu.

Có cách nào để giữ các lệnh tôi đã nhập một màu và phần còn lại về mặc định không?

Tôi đang dùng OSX.

EDIT # 1

Đây là một ảnh chụp màn hình mà @ derobert liên kết đến trong các bình luận cho thấy những gì tôi đang tìm kiếm.

                 ss # 1


2
Bạn cần chỉ cho chúng tôi lời nhắc của bạn để chúng tôi có thể xác định chính xác các lỗi.
Glenn jackman

Câu trả lời:


14

Về cơ bản, bạn muốn thiết lập lại màu của thiết bị đầu cuối ngay trước khi bash thực thi lệnh. Điều này có thể được thực hiện với a trap.

Ví dụ:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

Bash thực thi DEBUGbẫy ngay trước lệnh, vì vậy điều này sẽ dẫn đến tput sgr0(thiết lập lại các thuộc tính định dạng) được chạy trước mỗi lệnh.

Đây [[ -t 1 ]]là một kiểm tra an toàn để đảm bảo rằng STDOUT thực sự là một thiết bị đầu cuối. Có thể có một số trường hợp STDOUT của bash không được kết nối với thiết bị đầu cuối (đường ống, ssh từ xa, v.v.), và vì vậy bạn không muốn tputgửi mã thoát thiết bị đầu cuối.


Nơi nào bạn đặt điều này? Giả sử PS1 không đặt lại màu. Bây giờ làm thế nào để bạn thêm dòng này để thực hiện lệnh này ngay sau khi người dùng đặt lệnh của mình và nhấn enter?
polym

1
@polym tại của bạn .bashrc(hoặc bất cứ nơi nào $PS1được thiết lập). Tôi sẽ đặt nó ngay bên cạnh $PS1định nghĩa để bạn biết chúng có liên quan.
Patrick

ok wow hoạt động. Bất kỳ khả năng này có thể đi sai?
polym

@polym không còn nữa
Patrick

rực rỡ, đó chính xác là những gì tôi cần để thiết lập lại màu thiết bị đầu cuối.
iQ.
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.