สิ่งที่มีผลไม่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ไม่ได้พิมพ์ลำดับการหลีกเลี่ยงในทั้งสองกรณี