วิธีการปิดสีด้วย `ls '?


50

เป็นเรื่องปกติที่จะมีเอาต์พุตสีจากls, grepฯลฯ แต่เมื่อคุณไม่ต้องการมัน (เช่นในสคริปต์ที่คุณกำลังไพพ์ผลลัพธ์ไปยังคำสั่งอื่น) มีสวิตช์ที่สามารถปิดได้หรือไม่? ls -Gเปิดใช้ (มีบางรุ่นที่มาจาก BSD ls) หากไม่ใช่ค่าเริ่มต้น แต่ls +Gจะไม่ปิด มีอะไรอีกบ้างที่จะ?


4
ล่าช้า แต่สำหรับทุกคนที่ค้นหา: สำหรับGNU lsและgrepเมื่อคุณไม่ต้องทำอะไรเพราะ --color=autoท่อปิดแล้วระบายสีเมื่อเอาท์พุทมันเป็นท่อหรือในความเป็นจริงอะไรนอกจาก tty; นั่นคือความหมาย 'อัตโนมัติ' FreeBSD ls -Gหรือ 'CLICOLOR' ในทำนองเดียวกันจะถูกปิดใช้งานหากเอาต์พุตไม่ถูกส่งไปยังเทอร์มินัลเว้นแต่ว่า ... CLICOLOR_FORCE ... '
dave_thompson_085

คำตอบ:


69

lsโดยทั่วไปเอาต์พุตสีสำหรับจะเปิดใช้งานผ่านนามแฝงใน distros ส่วนใหญ่ในปัจจุบัน

$ alias ls
alias ls='ls --color=auto'

คุณสามารถปิดใช้งานชื่อแทนชั่วคราวได้ตลอดเวลาด้วยการใส่เครื่องหมายทับกลับหน้า

$ \ls

การดำเนินการด้านบนจะทำให้นามแฝงลัดวงจรสำหรับการเรียกใช้ครั้งนี้ คุณสามารถใช้งานได้ตลอดเวลาที่คุณต้องการปิดใช้งานนามแฝง


3
คุณสามารถใช้command lsแน่นอน แต่มันเร็วขึ้นเล็กน้อย
iconoclast

เคล็ดลับเรียบร้อย! ต้องอัปเดตสคริปต์เพื่อนำหน้า ``
เวียต

1
ฉันรัก \ ls
Alex Angelico

27

ด้วย GNU lsคุณสามารถระบุls --color=neverให้ปิดการใช้งานเอาต์พุตสีได้อย่างชัดเจน (แม้ว่าคุณจะมีalias ls='ls --color=auto'เมื่อคุณเรียกใช้ls --color=neverมันจะขยายไปls --color=auto --color=neverและตัวเลือกในภายหลังจะมีความสำคัญกว่า)


1
นี่เป็นคำตอบที่ฉันกำลังมองหา แต่ฉันจะให้คำตอบของ slm เป็นคำตอบที่เลือกเพราะมันจัดการกับกรณีที่ไม่ใช่ GNU เช่นเดียวกับรุ่นที่ได้จาก BSD (OS X, Solaris และแน่นอน * BSD)
iconoclast

3

คุณสามารถใช้ (เช่นใน DOS):

dir

มันจะแสดงผลโดยไม่ต้องสีคุณสามารถเพิ่มการขัดแย้งเดียวกันเช่นls-l


2
alias ls=ls

หรือ

unalias ls

สิ่งนี้จะปิดการใช้งานสีอย่างถาวร


3
แน่นอนว่านี่เป็นเหมือนการฆ่าแมลงวันด้วยปืนลูกซอง: คุณสูญเสียตัวเลือกอื่น ๆ ทั้งหมดที่คุณเพิ่มให้กับlsนามแฝงและคุณสูญเสียพวกเขาไปตลอดทั้งเซสชันแทนที่จะเป็นเพียงคำสั่งเดียว
iconoclast

นั่นเป็นเหตุผลที่ฉันพูดว่า "ถาวร" :-)
Slyx

2

ในลินุกซ์หลาย ๆ .bashrcนี้เปิดอยู่โดยเริ่มต้นในผู้ใช้

แก้ไข~/.bashrcและลบบรรทัดที่มีลักษณะดังนี้:

alias ls='ls --color=auto'

หากคุณต้องการปิดการใช้งานคุณสมบัตินี้สำหรับบัญชีใหม่ทั้งหมดที่สร้างขึ้นในเครื่องนี้ในอนาคตให้ลบบรรทัดเดียวกันออกจาก:

/etc/skel/.bashrc 

1

บน Centos7 จะมีการตั้งค่าใน/etc/profile.d/colorls.sh... 3 บรรทัดสุดท้ายของสคริปต์นี้คือ:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

หากคุณมีความปรารถนาและการอนุญาต ... การแสดงความคิดเห็นในบรรทัดที่ไม่พึงประสงค์ควรทำเคล็ดลับ


หรือunalias ls ll lในตัวคุณ.bashrcหากคุณไม่มีสิทธิ์
avsej

0

หากต้องการปิดสี: unalias ls

วิธีเปิดใช้สี: alias ls = 'ls --color = auto'

หากต้องการปิดใช้งานสีชั่วคราว: \ ls -ltr


0

อาจมีสิ่งอื่นเกิดขึ้น lsไม่ควรใช้สีเว้นแต่จะคิดว่าเชื่อมต่อกับสิ่งที่มีการโต้ตอบ ไม่ควรทำสีเมื่อคุณใช้โปรแกรมอื่น

นามแฝงมักเป็นความคิดที่ไม่ดีเพราะคุณไม่สามารถกำจัดตัวเลือกนั้นและคุณจะคุ้นเคยกับการตั้งค่าส่วนบุคคลที่คุณอาจไม่สามารถพกติดตัวไปกับเครื่องอื่นที่คุณต้องทำงาน หากคุณต้องการปิดการใช้งานไปป์ไลน์อย่างอื่นให้ใช้สวิตช์ในท่อนั้น แต่สีไม่ควรมีในท่อ

เพื่อlsดูว่าคุณรองรับLS_COLORSตัวแปรสภาพแวดล้อมหรือไม่ trapd00r / LS_COLORSแสดงให้คุณเห็นวิธีการทำงาน tht dircolorsช่วยให้คุณสามารถปรับสีอย่างละเอียดและต่อประเภทไฟล์ หากคุณไม่ได้ตั้งค่าLS_COLORSแต่เปิดการระบายสีไว้ระบบlsจะทำการเรียกใช้เครือข่ายเพื่อหาประเภทของไฟล์และคุณลักษณะเพื่อให้สามารถคิดได้ว่าจะให้สีอะไร ผู้คนที่อยู่เบื้องหลัง Sherlock พบว่าการตั้งค่าLS_COLORSสามารถหลีกเลี่ยงสิ่งเหล่านั้นและเพิ่มความเร็วได้ถึง40x อ่านรายละเอียดเลือดของพวกเขาเพื่อดูสิ่งที่พวกเขาพบ

ฉันทำให้ทุกประเภทไฟล์ใช้สีเริ่มต้น:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

นี่คือไฟล์ LS_COLORS ที่ฉันป้อนให้ dircolors:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

สำหรับการgrepดูว่าคุณสนับสนุนหรือGREP_COLORSGREP_OPTIONS


โปรดทราบว่านี่ยังคงทำให้ GNU lsเอาต์พุต escape sequences สำหรับสีที่เลือก เปรียบเทียบผลลัพธ์ของls --color=always | od -aกับของที่ls --color=never | od -aมีการตั้งค่าLS_COLORSนี้
Kusalananda

เคล็ดลับที่แท้จริงคือการที่ls | od -aไม่ปล่อยหนีออกมาและนั่นคือสิ่งที่ฉันต้องการ lsควรปล่อยลำดับนั้นเมื่อมันส่งออกไปยังขั้ว ถ้าคุณบอกให้แน่ใจว่ามันจะทำเช่นนั้น ดังนั้นอย่าทำอย่างนั้น
brian d foy

-1

การเพิ่มคำตอบของ @ brian-d-foy ส่วนใหญ่มีสีที่น่ารำคาญง่าย ๆ ที่คุณต้องการเปลี่ยนเช่นสีฟ้าที่มองไม่เห็นของไดเรกทอรีหรือสีเขียวฉูดฉาดของ "OTHER_WRITABLE" ดังนั้นเราจึงใช้ 24- บิตแสดง :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

เพื่อกำหนดสีไดเรกทอรีเฉพาะและสีอื่นที่สามารถเขียนได้

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

อ่านเพิ่มเติมเกี่ยวกับรหัส ANSI


1
คำถามที่เกี่ยวกับการลบสีทั้งหมดจากเอาท์พุทของ GNU lsไม่ใช่เกี่ยวกับวิธีการเปลี่ยนสีแต่ละสี
Kusalananda

ตกลงวิธีปิด "สีใดสีหนึ่งด้วย 'ls' ด้วย: ส่งออก LS_COLORS = 'ow = 00' เพื่อปิดเฉพาะ OTHER_WRITABLE
Iggy Lake
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.