- กลุ่มไดเรกทอรีแรกตัวเลือกสำหรับคำสั่ง "ls"


13

ฉันใช้ทั้ง Ubuntu 16.04 และ OS X

alias ll='ls -Flh --group-directories-first'

นี่เป็นนามแฝงใน bashrc ของฉัน แต่อย่างใด--group-directories-firstตัวเลือกผิดกฎหมายใน OS X หลังจากที่ฉันอัพเกรดทุบตีด้วย Homebrew ในเดสก์ท็อป Ubuntu ของฉันฉันยังคงสามารถใช้ตัวเลือกนั้นได้

ใน Bash รุ่นใดไม่รองรับตัวเลือกนี้? เวอร์ชั่น Bash ในเครื่อง OS X ของฉันบอกว่าGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

ฉันต้องการใช้--group-directories-firstตัวเลือกอีกครั้ง มีวิธีการที่จะบรรลุหรือไม่


1
คุณใช้ gnu correutils lsหรือ macOS lsหรือไม่? คุณเคยลองอีกไหม?
bmike

คำตอบ:


12

ติดตั้งcoreutilsกับ Homebrew และนามแฝงllไปgls -Flh --group-directories-firstแทน

  • brew install coreutils ติดตั้ง GNU Coreutilsในกรณีที่ไม่ได้ติดตั้ง
  • ใช้ในalias ll='gls -Flh --group-directories-first' (หากคุณต้องการใช้ไฟล์เดียวกันในระบบปฏิบัติการทั้งสองดูด้านล่าง).bashrc
    .bashrc

ใน Ubuntu lsให้บริการโดย GNU Coreutilsซึ่ง Ubuntu มีอยู่เสมอ นั่นเป็นเหตุผลที่lsรองรับ--group-directories-firstใน Ubuntu อาจเป็นไปได้ว่าคุณเคยใช้ GNU Coreutils เวอร์ชันของlsบน macOS มาก่อนเช่นกันซึ่ง Homebrew ติดตั้งเหมือนglsแต่สามารถใช้งานได้lsหลายวิธี

lsเป็นคำสั่งภายนอกไม่ใช่ Bash ในตัว การใช้เวอร์ชันอื่นหรือบิลด์ของ Bash ไม่ควรกระทบกับมัน ฉันไม่แน่ใจว่าเกิดอะไรขึ้นเมื่อคุณอัปเกรด Bash โดยใช้ Homebrew บางทีมากกว่า Bash ก็อัพเกรดเช่นกัน บางทีคุณอาจมีlsฟังก์ชั่นเชลล์หรือชื่อแทนที่กำหนดไว้ในไฟล์กำหนดค่าส่วนกลางที่ถูกแทนที่ บางทีคุณอาจมีลิงก์สัญลักษณ์lsที่ชี้ไปglsและเขียนทับ บางทีคุณอาจจะมีอะไรแบบนั้น แต่คุณ$PATHเปลี่ยนไป ไม่ว่าจะเกิดอะไรขึ้น GNU Coreutils lsสนับสนุน--group-directories-firstและเปลี่ยนไปใช้มัน (เพราะฉันเชื่อว่า bmike กำลังแนะนำ ) ควรแก้ไขปัญหาของคุณ

หากด้วยเหตุผลบางอย่างที่คุณต้องการใช้.bashrcไฟล์เดียวกันแน่นอนในทั้งสองระบบมีวิธีที่เป็นไปได้สองสามประการ คุณสามารถสร้าง symlink, wrapper script, shell function, หรือ (เพราะ Bash alias ส่วนขยายนั้นไม่ใช่แบบ nonrecursive) shell alias สำหรับglsระบบ Ubuntu ของคุณ แต่ผมขอแนะนำให้แทนการตรวจสอบที่ OS ที่ถูกนำมาใช้.bashrcในการ แม้ว่าคุณจะได้รับllนามแฝงที่แตกต่างกันที่กำหนดไว้ในแต่ละระบบวิธีนี้มีประโยชน์ในการเป็นเอกสารด้วยตนเอง คุณ.bashrcจะรู้สึกดีกับคุณในหนึ่งปีหรือหนึ่งเดือน

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ll='ls -Flh --group-directories-first'
else
    alias ll='gls -Flh --group-directories-first'
fi

หรือหากคุณพบว่าคุณชอบที่จะเรียกใช้ Coreutils lsแม้ว่าคุณจะไม่ได้ใช้llนามแฝงคุณสามารถสร้างlsนามแฝงได้ที่gls:

if [ "$OSTYPE" != linux-gnu ]; then  # Is this the macOS system?
    alias ls=gls
fi

alias ll='ls -Flh --group-directories-first'

(ขอบคุณไปที่soroushjpสำหรับการจับข้อผิดพลาดในสคริปต์รุ่นก่อนหน้านี้)


ฉันได้ทำตามคำตอบและการใช้งานนี้: alias ls = 'gls --color -h --group-directory-first' alias ll = 'ls -al'
user2875289

1
ฉันคิดว่าในส่วนสุดท้ายของคุณ"หรือถ้าคุณพบว่าคุณมักจะชอบวิ่ง ... "เงื่อนไขจะต้องเปลี่ยนเป็น: "$OSTYPE" != linux-gnu เนื่องจากคุณต้องการนามแฝงlsเพื่อglsถ้าคุณไม่ได้อยู่ในระบบ Linux GNU (เช่น คุณใช้ Mac)
soroushjp

1
@soroushjp ขอบคุณ - คุณพูดถูก (ฉันได้แก้ไขแล้วขอโทษเกี่ยวกับการรอคอย!)
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.