คำสั่ง Echo พร้อมตัวเลือกสีในสคริปต์และคำสั่งทำงานแตกต่างกัน


15

ถ้าฉันวิ่งเป็นecho -e "\e[1;31mThis is red text\e[0m"แถว comand มันจะพิมพ์ข้อความสีแดงออกมา

อย่างไรก็ตามถ้าฉันใช้มันเขียนในไฟล์สคริปต์ test.sh

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

วิ่ง $ sh test.sh

มันพิมพ์ออกมา -e \e[1;31mThis is red text\e[0m

ทำไมพวกเขาถึงทำแตกต่างกันไป?

คำตอบ:


29

echoเป็นตัวเชลล์ใน Bash และ Dash ( /bin/sh) หากคุณเรียกใช้echoจากบรรทัดคำสั่งคุณกำลังใช้ Bash builtin หากคุณใช้งานเชลล์สคริปต์ด้วยขณะที่shคุณกำลังใช้ Dash builtin

รุ่น dash ของechoไม่รู้-eตัวเลือก แต่เพียงแค่เอาท์พุทคำต่อคำใด ๆ โดยไม่ต้องจัดการพิเศษสำหรับ\ลำดับ

ใช้ Bash เพื่อรันเชลล์สคริปต์ของคุณหรือใช้/bin/echoแทนecho:

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

เพื่อหลีกเลี่ยงปัญหาเกี่ยวกับเวอร์ชั่นต่าง ๆ ที่echoคุณอาจต้องการใช้printfแทน ตรงกันข้ามกับecho printfการตีความ\ลำดับเสมอแต่ไม่ได้เพิ่ม linefeed อัตโนมัติในตอนท้ายดังนั้นคุณต้องผนวก\nท้ายถ้าคุณต้องการ

เนื่องจากบางรุ่นprintfไม่เข้าใจ\eคุณควรใช้\033แทน:

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

มันได้ผล. /bin/echoด้วยเส้นประ ( /bin/sh) และทุบตี; echoด้วย bash หรือ./tes.shทั้งสองทำงานอย่างถูกต้อง รหัสด้านล่างใช้ได้กับbashเท่านั้น ถ้า [$ UID -ne 0]; จากนั้น echo "ไม่ใช่ผู้ใช้รูท" และ echo "ผู้ใช้รูท" fi
qingfeng

1

อย่าเรียกใช้ด้วยsh test.shมันพิมพ์ข้อความเป็นสีขาวอย่างที่คุณพูด .. หลังจากสร้างสคริปต์แล้ว

sudo chmod +x /path/test.sh

ป้อนคำอธิบายรูปภาพที่นี่

เรียกใช้สคริปต์ด้วยsudoเช่นsudo ./test.shหรือ./test.shทั้งสองจะทำงาน

หรือ

เรียกใช้สคริปต์ด้วยbash,

bash /path/test.sh

ฉันวิ่งchmod a+x test.shมันพิมพ์ข้อความเป็นสีอ่าน อะไรคือความแตกต่าง. ./test.shควรเท่ากับsh test.shสิ่งที่เกิดขึ้นใน linux
qingfeng

คุณไม่ต้องใช้ sh ในขณะที่เรียกใช้สคริปต์คุณได้สร้างสคริปต์ด้วยล่าม bash #! /bin/bashดังนั้นคุณต้องใช้bash test.sh
Avinash Raj

และยัง.หมายถึงไดเรกทอรีปัจจุบัน
Avinash Raj

ดูภาพหน้าจอไฟล์ test.sh ของฉันจะอยู่ในเดสก์ท็อปดังนั้นฉันจึงย้ายไปยังโฟลเดอร์เดสก์ท็อปนั้นจากนั้นฉันก็เรียกใช้./test.shในที่สุดมันก็ใช้งานได้โปรดจำไว้ว่าให้เรียกใช้สคริปต์ด้วย.เฉพาะเมื่อมันปรากฏในไดเรกทอรีปัจจุบัน
Avinash Raj

1

สิ่งนี้ต้องการคำสั่งที่ถูกต้องในรูปแบบที่ถูกต้องคือทั้งหมด

คำสั่ง echo ที่เหมาะสม: echo "Hello World!"

คำสั่ง echo ที่เหมาะสมพร้อมสี: echo "\e[1;31mHello World!\e[0m"

การเพิ่มสีให้กับสคริปต์ทุบตีเป็นหนึ่งในสิ่งที่เรียบง่าย แต่สับสนได้ง่าย =)

ไซต์นี้สามารถช่วยอธิบายให้คุณได้อย่างชัดเจน ฉันมักจะใช้เป็นข้อมูลอ้างอิงเพราะใครสามารถจำรหัสสีที่ถูกต้องได้ทั้งหมด ฮ่า ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.