- समूह-निर्देशिका-पहला विकल्प "ls" कमांड के लिए


13

मैं Ubuntu 16.04 और OS X दोनों का उपयोग कर रहा हूं।

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

यह मेरे bashrc में एक उपनाम है, लेकिन होमबॉव के --group-directories-firstसाथ मेरी बैश को अपग्रेड करने के बाद ओएस एक्स में किसी तरह विकल्प अवैध हो गया। मेरे उबंटू डेस्कटॉप में, मैं अभी भी उस विकल्प का उपयोग कर सकता हूं।

बैश के किस संस्करण में, विकल्प असमर्थित है? मेरे OS X मशीन में बैश संस्करण कहता हैGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

मैं --group-directories-firstफिर से विकल्प का उपयोग करना चाहूंगा । क्या इसे हासिल करने का कोई तरीका है?


1
आप ग्नू correutils lsया macOS का उपयोग कर रहे हैं ls? क्या आपने दूसरे की कोशिश की है?
bmike

जवाबों:


12

स्थापित करें coreutilsHomebrew और उर्फ साथ llकरने gls -Flh --group-directories-firstके बजाय।

  • brew install coreutils यदि यह स्थापित नहीं है, तो GNU Coreutils स्थापित करता है।
  • का प्रयोग करें alias ll='gls -Flh --group-directories-first'में .bashrc
    (यदि आप .bashrcदोनों ऑपरेटिंग सिस्टम में एक ही फाइल का उपयोग करना चाहते हैं , तो नीचे देखें।)

उबंटू में, lsजीएनयू कोरुटिल्स द्वारा प्रदान किया जाता है , जो उबंटू में हमेशा होता है। इसीलिए उबंटू में lsसपोर्ट करता --group-directories-firstहै। संभवतः आप पहले भी macOS lsपर GNU Coreutils संस्करण का उपयोग कर रहे थे , जो कि Homebrew के रूप में स्थापित करता है, glsलेकिन जिसे lsकई तरीकों से प्रयोग करने योग्य बनाया जा सकता है।

lsएक बाहरी कमांड है, न कि बैश बिलिन। बैश के किसी भिन्न संस्करण या बिल्ड का उपयोग करने से इसे प्रभावित नहीं होना चाहिए। मुझे यकीन नहीं हो रहा है कि जब आपने होमब्रे का उपयोग करके बैश को अपग्रेड किया तो क्या हुआ। हो सकता है कि बाश से ज्यादा अपग्रेड भी मिले; हो सकता है कि आपके पास एकlsशेल फ़ंक्शन या उर्फ ​​एक वैश्विक कॉन्फ़िगरेशन फ़ाइल में परिभाषित किया गया था जिसे बदल दिया गया था; हो सकता है कि आपके पास एक प्रतीकात्मक लिंकlsथा जो इंगित कियाglsगया था और ओवरराइट किया गया था; हो सकता है कि आपके$PATHपासअभी भी ऐसा कुछ हो, लेकिन आपकापरिवर्तन हो गया है। जो कुछ भी हुआ, ग्नू कोरुटिल्स lsका समर्थन करता है--group-directories-first , और इसे स्विच करना (जैसा कि मेरा मानना ​​है कि bmike सुझाव दे रहा है ) को आपकी समस्या को ठीक करना चाहिए।

यदि किसी कारण से आप .bashrcदोनों प्रणालियों में सटीक एक ही फ़ाइल का उपयोग करना चाहते हैं, तो कुछ संभव दृष्टिकोण हैं। आप glsअपने उबंटू प्रणाली के लिए एक सिम्लिंक, रैपर स्क्रिप्ट, शेल फ़ंक्शन, या (क्योंकि बैश उर्फ ​​विस्तार गैर-व्यापक है) शैल उपनाम बना सकते हैं। लेकिन मैं सुझाव देता हूं कि यह जांचने के बजाय कि किस ओएस का उपयोग किया जा रहा है .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

या यदि आप पाते हैं कि आप आमतौर पर कोरुटिल्स चलाना पसंद करते हैं 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'

( उस स्क्रिप्ट के पुराने संस्करण में गलती पकड़ने के लिए धन्यवाद सॉर्सहजप पर जाएं ।)


मैंने इस उत्तर का उपयोग किया और उपयोग किया: अलियास ls = 'gls --color -h --group-directory-first' उर्फ ​​ll = 'ls
-al

1
मुझे लगता है कि आपके अंतिम खंड में "या यदि आप पाते हैं कि आप आमतौर पर चलाना पसंद करते हैं ..." , सशर्त को बदलने की आवश्यकता है: "$OSTYPE" != linux-gnu चूंकि आप एलएएस एलएस को gls करना चाहते हैं यदि आप लिनक्स जीएनयू सिस्टम पर नहीं हैं (जैसे आप एक मैक पर हैं)।
सॉर्सहजप

1
@soroushjp धन्यवाद - आप सही कह रहे हैं। (मैंने इसे ठीक कर लिया है; प्रतीक्षा के बारे में खेद!)
एलिया कगन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.