Câu trả lời:
Chuỗi thực sự \033[
và đó không phải là toàn bộ.
Sau đó, khung mở đầu xuất hiện một loạt các số và ký hiệu. Chuỗi này được gọi là một chuỗi thoát và được sử dụng để kiểm soát con trỏ và màu văn bản của giao diện điều khiển, trong số những thứ khác.
trình tự thoát không in phải được đính kèm trong
\[\033[ and \]
Nếu chuỗi thoát đang kiểm soát màu văn bản, thì nó sẽ được theo sau bởi một m
.
Đây là bảng cho các chuỗi màu:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Vì vậy, nếu bạn muốn dấu nhắc giao diện điều khiển của mình có màu xanh, bạn sẽ sử dụng chuỗi thoát sau đây (trong tên tệp tôi đang quên):
\[\033[34m\]
(Lưu ý m
)
Trình tự thoát này không chỉ kiểm soát màu sắc, tuy nhiên. Nó cũng có thể điều khiển chuyển động con trỏ. Dưới đây là bảng / danh sách với mã chuyển động và cách chúng hoạt động:
Định vị con trỏ:
\033[<L>;<C>H
Hoặc là
\033[<L>;<C>f
đặt con trỏ ở dòng L và cột C.
Di chuyển con trỏ lên N dòng:
\033[<N>A
Di chuyển con trỏ xuống N dòng:
\033[<N>B
Di chuyển con trỏ về phía trước N cột:
\033[<N>C
Di chuyển con trỏ N cột ngược:
\033[<N>D
Xóa màn hình, di chuyển đến (0,0):
\033[2J
Xóa đến cuối dòng:
\033[K
Lưu vị trí con trỏ:
\033[s
Khôi phục vị trí con trỏ:
\033[u
Chỉ cần lưu ý rằng hai cái cuối cùng có thể không hoạt động trong trình giả lập thiết bị đầu cuối mà bạn sử dụng. Rõ ràng, chỉ xterm
và nxterm
sử dụng hai chuỗi đó.
Và ví dụ sử dụng một trong các chuỗi thoát này: giả sử tôi muốn định vị con trỏ của mình ở dòng 3, cột (ký tự) 9. Vì vậy, tôi sẽ sử dụng
\[033\[3;9H]
(Tôi giả sử rằng cột 0 là vị trí đầu tiên, vì vậy đó sẽ là ký tự thứ 8).
Nguồn: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (cũng đọc 6.2)
Đọc tổng quát hơn: http://ascii-table.com/ansi-escape- resultences.php
[2K
xóa toàn bộ dòng cả trước và sau con trỏ. Một nguồn tốt hơn nhiều sẽ là bài viết Wikipedia hoặc bạn có thể truy cập trực tiếp vào ECMA-48 , phần 8.3.117 SGR - Chọn Kết xuất đồ họa .
0;
trong các chuỗi màu là không cần thiết. Điều đó chỉ làm cho màu nền mặc định trước khi đặt nền trước. Bạn cũng có thể thiết lập nền với 4x
.
Chúng là các lệnh điều khiển cho thiết bị đầu cuối.
Thiết bị đầu cuối ban đầu là các thiết bị khá ngu ngốc được kết nối với một cổng nối tiếp và không phải là những phần mềm GUI đa tab ưa thích với các menu mà chúng ta hiện có. Vì chúng chỉ nhận được một luồng ký tự (byte), nên không có sự phân tách rõ ràng giữa dữ liệu (những gì cần in trên màn hình) và các lệnh (cách in nó). Thay vào đó, các lệnh được thể hiện bằng các ký tự điều khiển đặc biệt.
Các ký tự điều khiển rõ ràng là những thứ như nguồn cấp dữ liệu (dòng mới), backspace và tiếng bíp chuông, nhưng các lệnh cụ thể hơn được đưa ra dưới dạng các chuỗi ký tự, bắt đầu bằng ESC
ký tự (mã 27 ở dạng thập phân, 0x1b trong hex hoặc 033 bát phân). Nó thường được đại diện như ^[
, hoặc \033
như trong ví dụ của bạn.
Chuỗi ESC [
được gọi là CSI hoặc Trình giới thiệu trình tự điều khiển và nó bắt đầu một lệnh với các tham số số tùy chọn, kết thúc bằng một chữ cái xác định lệnh chính. Hầu hết các chuỗi thoát phổ biến rơi vào lớp này.
Danh sách mã thoát có thể được tìm thấy, ví dụ như trong console_codes(4)
trang man và trên trang Wikipedia cho mã thoát ANSI .
Vài ví dụ:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Bạn có thể kiểm tra các lệnh với ví dụ Bash. Sử dụng -e
cờ, echo
lệnh dựng sẵn chấp nhận \033
làm đại diện cho ESC
ký tự.
Ví dụ, điều này sẽ in một lời chào có màu ở giữa màn hình và một lời chào bình thường khác ở vị trí con trỏ ban đầu:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
Trình tự ESC ]
mà bạn đã đề cập là OSC hoặc Lệnh hệ điều hành, phần lớn được sử dụng trong lệnh để đặt tiêu đề cửa sổ xterm
và các mục khác, ví dụ:
echo -e '\033]0;new window title\a'
Sau đó, cũng có ESC ( A
(và các chữ cái khác) đặt các ký tự quốc gia trên một số thiết bị đầu cuối, thành một hiệu ứng vui nhộn tiềm năng .
Thoát theo sau là một dấu ngoặc vuông bên phải escape]
được sử dụng để giới thiệu lệnh hệ điều hành ( OSC
).
Nó nằm trong ECMA-48 và bạn có thể đọc một bản tóm tắt các chuỗi điều khiển được sử dụng bởi xterm trong Trình tự điều khiển XTerm , ví dụ, để thay đổi tiêu đề của cửa sổ đầu cuối.
Trình tự thoát có thể bắt đầu với các nhân vật khác nhau. Các C1 (8-Bit) Kiểm soát Nhân vật phần trong XTerm kiểm soát Sequences đề cập đến một vài trong số những: CSI
(mà bạn thấy như escape[
, APC
, DCS
, PM
. Lý do cho sự (thứ hai) nhân vật khác nhau là do cặp (thoát và ]
) được liên kết với một ký tự điều khiển byte đơn được sử dụng cho các loại chuỗi thoát khác nhau .
Nếu bạn đọc qua đặc tả, bạn sẽ thấy rằng CSI
được sử dụng cho các điều khiển với tham số số, trong khi OSC
cho phép chuỗi. Ngoài cú pháp, ủy ban tạo ra tiêu chuẩn này có ý định sử dụng APC
và PM
khác với DCS
và OSC
.
Chúng được gọi là mã thoát ANSI và chúng được liệt kê trong trang man cho console_codes . Chúng không phải là đặc trưng của Bash, mà là hoạt động trong bất kỳ ứng dụng giao diện điều khiển nào miễn là thiết bị đầu cuối hỗ trợ chúng (hầu hết các trình giả lập thiết bị đầu cuối đều làm như vậy).
"Trình tự thoát" được mô tả trong các câu trả lời khác phụ thuộc vào loại TYPE đầu cuối nào của bạn (thường là "ANSI" hoặc dẫn xuất / tương tự).
$ echo $TERM
xterm
Nếu bạn muốn viết các tập lệnh (phần nào) ĐỘC LẬP của thuật ngữ, nhưng vẫn sử dụng ví dụ như màu sắc và các tính năng đặc biệt khác, thì hãy xem nội dung của man terminfo
.
ví dụ
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
sẽ in .test.
với test
nền màu vàng và màu nền trước màu đỏ, và điều này sẽ hoạt động cho BẤT K terminal thiết bị đầu cuối nào thực sự có khả năng sử dụng màu theo cách tương tự.
Để xem những gì thực sự được in, hãy đưa nó vào od -t x1z
như trong
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... Trong đó các giá trị được hiển thị dưới dạng thập lục phân (do "x").