Lệnh Echo với tùy chọn màu trong tập lệnh và lệnh hoạt động khác nhau


15

Nếu tôi chạy echo -e "\e[1;31mThis is red text\e[0m"trong dòng comand, Nó in ra văn bản màu đỏ.

Tuy nhiên, nếu tôi sử dụng viết nó trong tập tin kịch bản test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

chạy $ sh test.sh

Nó in ra -e \e[1;31mThis is red text\e[0m

Tại sao họ hành động khác nhau?

Câu trả lời:


29

echolà một shell dựng sẵn trong Bash và dash ( /bin/sh). Nếu bạn chạy echotừ dòng lệnh bạn đang sử dụng nội dung Bash, nếu bạn đang chạy tập lệnh shell của mình thì shbạn đang sử dụng nội dung Dash.

Phiên bản dash của echokhông biết -etùy chọn mà chỉ xuất ra bất cứ điều gì nguyên văn mà không có bất kỳ xử lý đặc biệt nào cho \chuỗi.

Sử dụng Bash để chạy tập lệnh shell của bạn hoặc sử dụng /bin/echothay vì echo:

/bin/echo -e "\e[1;31mThis is red text\e[0m"

Để tránh các vấn đề với các phiên bản khác nhau của echobạn có thể muốn sử dụng printfthay thế. Ngược lại, echo printfluôn luôn diễn giải \các chuỗi nhưng không tự động thêm một nguồn cấp dữ liệu ở cuối, do đó bạn phải nối thêm \nvào cuối nếu bạn muốn.

Vì một số phiên bản printfkhông hiểu \ebạn nên sử dụng \033thay thế:

printf "\033[1;31mThis is red text\033[0m\n"

Nó hoạt động. /bin/echovới dấu gạch ngang ( /bin/sh) và bash; echovới bash hoặc ./tes.shcả hai hoạt động chính xác. Mã dưới đây chỉ hoạt động với bash. nếu [$ UID -ne 0]; sau đó lặp lại "Không phải người dùng root" khác echo "Người dùng root" fi
qingfeng

1

Đừng chạy nó với sh test.sh, nó in văn bản màu trắng như bạn đã nói..Sau khi tạo tập lệnh, làm cho nó có thể thực thi được bằng cách chạy,

sudo chmod +x /path/test.sh

nhập mô tả hình ảnh ở đây

Chạy script với sudo, like sudo ./test.shhoặc ./test.shcả hai sẽ hoạt động.

Hoặc là

Chạy kịch bản với bash,

bash /path/test.sh

Tôi chạy chmod a+x test.sh, nó in văn bản màu đọc. Sự khác biệt là gì. ./test.shnên bằng với sh test.shnhững gì đã xảy ra trong linux?
qingfeng

bạn không phải sử dụng sh trong khi chạy tập lệnh, bạn đã tạo tập lệnh với trình thông dịch bash #! /bin/bashđể bạn phải sử dụngbash test.sh
Avinash Raj

Và cũng .có nghĩa là thư mục hiện tại.
Avinash Raj

Xem ảnh chụp màn hình, tệp test.sh của tôi được đặt bên trong máy tính để bàn. Vì vậy, tôi đã di chuyển đến thư mục máy tính để bàn đó và sau đó tôi chạy ./test.sh, cuối cùng nó cũng hoạt động. Hãy nhớ rằng chỉ chạy trong tập lệnh .hiện tại.
Avinash Raj

1

Điều này cần lệnh chính xác trong định dạng chính xác là tất cả.

Tuyên bố tiếng vang đúng: echo "Hello World!"

Tuyên bố echo đúng với màu sắc: echo "\e[1;31mHello World!\e[0m"

Thêm màu sắc vào tập lệnh bash là một trong những điều rất đơn giản nhưng dễ gây nhầm lẫn. =)

Trang web này có thể giúp giải thích tất cả rõ ràng cho bạn. Tôi thường sử dụng nó làm tài liệu tham khảo bởi vì, ai có thể nhớ tất cả các mã màu chính xác phải không? cười lớ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.