สิ่งที่มีผลไม่auto
เป็นตัวเลือกสำหรับที่--color
สวิทช์ได้ใน grep? grep ตัดสินใจเลือกสีของสตริงการจับคู่และเมื่อใด
สิ่งที่มีผลไม่auto
เป็นตัวเลือกสำหรับที่--color
สวิทช์ได้ใน grep? grep ตัดสินใจเลือกสีของสตริงการจับคู่และเมื่อใด
คำตอบ:
กับ --color=auto
grep จะเน้นสตริงที่ตรงกันหาก (และเฉพาะในกรณี) เอาต์พุตถูกเขียนโดยตรงไปยังเทอร์มินัลและเทอร์มินัลดังกล่าวสามารถแสดงผลสีได้
โดยปกติ--color=auto
คือสิ่งที่คุณต้องการ ถ้าเช่นคุณใช้ grep เพื่อจับคู่ URL และไปป์กับ Wget Wget จะเห็น\e[1;31mhttp://...
แทนที่จะเป็น URL จริง (และทำให้หายใจไม่ออก)
คำสั่งต่อไปนี้ควรทำให้ได้ผลลัพธ์เป็นสี:
echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat
อย่างไรก็ตามคำสั่งนี้ไม่ควร:
echo Super User | grep --color=auto Super | cat
ความไม่สอดคล้องใด ๆ กับพฤติกรรมนี้ควรถือว่าเป็นข้อบกพร่อง
ด้วย--color=auto
ล่าสุดGrep สำหรับ Windowsรุ่น (2.5.4) - เช่นเดียวกับต้นฉบับ 2.5.4 มันขึ้นอยู่กับ - สีเอาท์พุทถ้าหากว่าสภาพ
isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")
เป็นจริงเช่นถ้าเพียง แต่หากเอาต์พุตกำลังถูกเขียนไปยังเทอร์มินัลตัวแปรสภาพแวดล้อมTERM
จะถูกกำหนดและเทอร์มินัลจะไม่เป็นใบ้ใบ้
สิ่งนี้จะไม่ทำให้เกิดพฤติกรรมที่ต้องการใน Windows เนื่องจากTERM
โดยปกติจะไม่ได้กำหนดไว้ วิธีแก้ไขปัญหานี้ง่าย ๆ คือการตั้งค่าTERM=windows
ในแผงควบคุม
grepรุ่นล่าสุด(2.14) แก้ไขปัญหานี้ได้โดยการกำหนดผลลัพธ์ถ้ามีเงื่อนไข
isatty(STDOUT_FILENO) && should_colorize()
เป็นจริงซึ่งshould_colorize()
มีการกำหนดแตกต่างกันสำหรับ POSIX และ Win32:
สำหรับอดีตเงื่อนไขเท่ากับหนึ่งใน 2.5.4; สำหรับหลังตัวแปรสภาพแวดล้อมTERM
ไม่จำเป็นต้องตั้งค่า (มันเป็นไปไม่ได้dumb
)
sdgstd.h
, istty(stdout)
ผลตอบแทน0
ถ้าเอาท์พุทถูกเปลี่ยนเส้นทางไปยังแฟ้ม
grep
และless
จากโครงการ GnuWin (gnuwin32.sourceforge.net) cmd.exe
ปรับปรุงด้วยansicon
ยูทิลิตี้ less --color=auto
ใช้งานได้ตามที่คาดไว้: ใช้สีเมื่อไม่มีการเปลี่ยนเส้นทางและไม่ใช้เมื่อมีการเปลี่ยนเส้นทางผลลัพธ์ แต่grep --color=auto
ไม่ได้พิมพ์ลำดับการหลีกเลี่ยงในทั้งสองกรณี