PATH को मानव-पठनीय तरीके से दिखाएं


43

मैं अपने PATH पर्यावरण चर को और अधिक मानव-पठनीय तरीके से दिखाना चाहता हूं।

$ echo $PATH
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin:/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/bin:/usr/local/git/bin:/Users/arturo/.gvm/groovy/current/bin:/Users/arturo/.gvm/grails/current/bin:/Users/arturo/.gvm/griffon/current/bin:/Users/arturo/.gvm/gradle/current/bin:/Users/arturo/.gvm/lazybones/current/bin:/Users/arturo/.gvm/vertx/current/bin:/Users/arturo/.gvm/bin:/Users/arturo/.gvm/ext:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

मैं कुछ इस तरह से सोच रहा हूँ:

$ echo $PATH | some cut and awk magic
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/bin
...

क्रॉस-साइट डुप्लिकेट askubuntu.com/q/600018/295286 और codegolf.stackexchange.com/q/96334/55572
सर्गी

जवाबों:


62

आप उपयोग कर सकते हैं tr

$ tr ':' '\n' <<< "$PATH"
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...

आप इसे कुछ गोले (बाश और ज़ीश में परीक्षण) में भी कर सकते हैं:

echo -e ${PATH//:/\\n}

Zsh में, आप कॉलोन के $pathबजाय रिक्त स्थान के साथ अपने मार्ग को देखने के लिए चर का उपयोग कर सकते हैं ।

$ echo $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin /Users/arturo/.rvm/bin

जिसे printfया के साथ जोड़ा जा सकता है print

$ printf "%s\n" $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...
$ print -l $path
/Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin
/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin
/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin
...

<<<ऑपरेटरों herestrings कहा जाता है। हेर्स्ट्रेस शब्द को उनके बाईं ओर कमांड के मानक इनपुट के दाईं ओर पास करते हैं।

$ cat <<< 'Hello there'
Hello there

यदि आपका शेल उनका समर्थन नहीं करता है, तो उपयोग करें echoऔर एक पाइप।

$ echo 'Hello there' | cat
Hello there

2
दिलचस्प है यहाँ स्ट्रिंग का उपयोग, मैं निम्नलिखित करूँगा: echo $PATH | tr ':' '\n'लेकिन आपका समाधान अधिक स्पष्ट है।
आर्टुरो हेरेरो

1
मैंने किसी भी राहगीर को हेरस्ट्रेस के उपयोग को समझाने के लिए अपने उत्तर में थोड़ा सा जोड़ा।

Zsh में, print -l $pathकुछ कीस्ट्रोक्स बचाता है। यह विफल रहता है यदि $pathबैकस्लैश शामिल हैं, लेकिन यह बहुत ही असामान्य है।
गिल्स एसओ- बुराई को रोकना '

ध्यान दें कि उनमें से कुछ रिक्त प्रविष्टियों को प्रदर्शित करने में विफल रहेंगे $PATH
स्टीफन चेज़लस

@ स्टेफ़ेनचेज़लस: मैंने इसके बारे में कभी नहीं सोचा। पहले दो प्रदर्शन खाली प्रविष्टियाँ। केवल zsh- वाले नहीं करते हैं।

4

यहाँ के साथ एक त्वरित तरीका है bash

OLDIFS=$IFS IFS=: arr=($PATH) IFS=$OLDIFS
printf "%s\n" "${arr[@]}"

4
आप IFSसबशेल का उपयोग करके बचत / बहाली से बच सकते हैं । जैसे(IFS=: arr=($PATH); printf "%s\n" "${arr[@]})")
निक

1
यदि यह अंतिम है (तो इसके /bin:/usr/bin:लिए एक सामान्य मूल्य हुआ करता है $PATH)
स्टीफन चेज़लस

यदि $PATHकुछ वाइल्डकार्ड वर्ण (
अयोग्य

जैसा कि आप bashवैसे भी निर्दिष्ट करते हैं , आप IFS=: read -a arr <<< "$PATH"विभाजन वाले हिस्से के लिए उपयोग कर सकते हैं । इस तरह IFSके नए मूल्य का उपयोग केवल निष्पादित करते समय किया जाएगा read, इसलिए इसे पुनर्स्थापित करने की कोई आवश्यकता नहीं है। pastebin.com/7E7C4AcR
मैनटवर्क

प्रतिक्रिया के लिए धन्यवाद। @manatwork, क्या आप जानते हैं कि IFSनई वैल्यू एरे क्रिएशन के बाद भी बनी रहती है लेकिन एग्जीक्यूट करने के बाद नहीं read?
इरुवर


1

ध्यान दें कि एक खाली पेट से एक परेशान पेट का अलग अर्थ है। एक खाली पेटी में एक खाली तत्व होता है, और इसका मतलब है कि वर्तमान निर्देशिका में केवल निष्पादन योग्य की तलाश है, एक परेशान पेटी का अर्थ है कि निर्देशिका की डिफ़ॉल्ट सूची में निष्पादनयोग्य के लिए खोज करना (लेकिन ध्यान दें कि कुछ प्रणालियों पर, प्रत्येक उपकरण की सामग्री पर सहमत नहीं है वह सूची)

इन zsh:

if (($+PATH)); then
  echo "$#path element(s):"
  printf '%q\n' "$path[@]"
else
  echo "PATH unset"
fi

POSIX गोले में (ध्यान दें कि मोड zshभी shउस संबंध में POSIX नहीं है):

if [ -n "${PATH+.}" ]; then
  (
    p=$PATH:
    set -f
    IFS=:
    set -- $p
    echo "$# element(s):"
    printf '"%s"\n' "$@"
  )
else
  echo "PATH unset"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.