Làm thế nào để một đầu ra in đậm văn bản trong Bash?


241

Tôi đang viết một đoạn script Bash in một số văn bản lên màn hình:

echo "Some Text"

Tôi có thể định dạng văn bản không? Tôi muốn làm cho nó đậm.

Câu trả lời:


427

Cách tương thích nhất để thực hiện việc này là sử dụng tputđể khám phá các chuỗi đúng để gửi đến thiết bị đầu cuối:

bold=$(tput bold)
normal=$(tput sgr0)

sau đó bạn có thể sử dụng các biến $bold$normalđịnh dạng mọi thứ:

echo "this is ${bold}bold${normal} but this isn't"

cho

cái này đậm nhưng cái này không


2
Điều đó thật tiện lợi. Nếu tôi hiểu chính xác, Điều này cũng giống như chèn các lối thoát, nhưng nó sẽ hoạt động trong các thiết bị đầu cuối khác (không phải VT100).
JamesRat

Điều đó đúng - nó tìm kiếm các mã thích hợp theo giá trị của HẠN.
psmears

2
Nếu bạn có nhu cầu gạch chân văn bản, bạn có thể thêm một biến. Lưu ý, các backticks đang được xóa khỏi định dạng bình luận. Sử dụng định dạng tương tự trong câu trả lời. HIỂU =tput smul
jayem

3
tputlà một lệnh tuyệt vời với rất nhiều lệnh cho nhiều nhiệm vụ khác nhau.
Drew Noakes

Tôi đang cố gắng làm điều gì đó tương tự như những gì OP đang làm, nhưng với một motdtệp. Làm thế nào / nơi tôi sẽ xác định $bold$normalcác biến trong trường hợp đó?
Matt

74

Để áp dụng một kiểu trên chuỗi của bạn, bạn có thể sử dụng một lệnh như:

echo -e '\033[1mYOUR_STRING\033[0m'

Giải trình:

  • tiếng vang -e --e Tùy chọn có nghĩa là các chuỗi đã thoát (dấu gạch chéo ngược) sẽ được diễn giải
  • \ 033 - chuỗi thoát được biểu thị bắt đầu / kết thúc kiểu
  • chữ thường m - chỉ sự kết thúc của chuỗi
  • 1 - Thuộc tính in đậm (xem bên dưới để biết thêm)
  • [0m - đặt lại tất cả các thuộc tính, màu sắc, định dạng, v.v.

Các số nguyên có thể là:

  • 0 - Phong cách bình thường
  • 1 - đậm
  • 2 - chiều
  • 3 - Chữ nghiêng
  • 4 - Gạch chân
  • 5 - Nháy mắt
  • 7 - Đảo ngược
  • 8 - Vô hình

1
Lời giải thích hay. Đã tìm kiếm xung quanh những gì chức năng [0mcung cấp và điều này giải thích nó tốt
Jeremy

Mặc dù nó phải vậy\033[0m
Jeremy

1
3- in nghiêng , ít nhất là trong konsole
David Tabernero M.

Một điều ước Strikethrough đã được hỗ trợ trên Ubuntu và một số nền tảng phổ biến khác.
Ngôi sao đen1

45

Tôi giả sử bash đang chạy trên thiết bị đầu cuối tương thích vt100 trong đó người dùng không tắt hỗ trợ định dạng một cách rõ ràng.

Đầu tiên, bật hỗ trợ cho các ký tự đặc biệt echo, sử dụng -etùy chọn. Sau đó, sử dụng chuỗi thoát ansi ESC[1m, như:

echo -e "\033[1mSome Text"

Thông tin thêm về trình tự thoát ansi chẳng hạn tại đây: ascii-table.com/ansi-escape- resultences-vt-100.php


Cảm ơn. Tôi tìm thấy một số danh sách khác về các chuỗi thoát, nhưng danh sách bạn liên kết đến rất rộng!
JamesRat

18
Đừng quên dừng định dạng in đậm ở cuối chuỗi: echo -e "\033[1mSome Text\033[0m"nếu không các dòng sau của thiết bị đầu cuối của bạn cũng sẽ được in đậm
mems

Giải pháp này hoạt động ngay cả với PHP-CLI, đó là một lợi thế so với giải pháp khác.
David

nếu bạn gặp khó khăn trong việc ghi nhớ, \033bạn có thể sử dụng \enhưecho -e "\e[1msome text\e[0m"
Felipe Alvarez

1
Trình tự thoát bát phân được cho phép trong JS (JavaScript)
Pat-Cười

14

Theo lý thuyết như vậy:

# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line

# Using tput
tput bold 
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL

# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line. 

Nhưng trong thực tế, nó có thể được hiểu là màu "cường độ cao".

(nguồn: http://unstableme.blogspot.com/2008/01/ansi-escape-fterences-for-wr-text.html )

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.