মানব পাঠযোগ্য উপায়ে PATH প্রদর্শন করুন


43

আমি আমার পাথ পরিবেশকে আরও মানব-পঠনযোগ্য উপায়ে পরিবর্তনশীল দেখাতে চাই।

$ 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
Sergiy Kolodyazhnyy

উত্তর:


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, সুতরাং এটি পুনরুদ্ধার করার দরকার নেই। পেস্টবিন.
com

সমস্ত প্রতিক্রিয়ার জন্য ধন্যবাদ। @ মান্যাট ওয়ার্ক, আপনি কি জানেন যে IFSঅ্যারে তৈরির পরেও এর নতুন মান কেন স্থায়ী হওয়ার পরে নয় read?
ইরুবার


1

নোট করুন যে একটি আনসেট করা পাঠ্য খালি PATH থেকে আলাদা অর্থ রয়েছে। একটি খালি PATH এর মধ্যে একটি খালি উপাদান রয়েছে, এবং এর অর্থ কেবলমাত্র বর্তমান ডিরেক্টরিতে এক্সিকিউটেবলের সন্ধান করা হবে, একটি আনসেট করা PATH এর অর্থ নির্ধারিত ডিরেক্টরিগুলির ডিরেক্টরিতে এক্সিকিউটেবলদের অনুসন্ধান করা (তবে লক্ষ্য করুন যে কয়েকটি সিস্টেমে প্রতিটি সরঞ্জামের সামগ্রীতে একমত নয়) যে তালিকা)

ইন zsh:

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

পসিক্স শেলগুলিতে (দ্রষ্টব্য যে zshএমনকি shমোডেও সে বিষয়ে পসিক্স নয়):

if [ -n "${PATH+.}" ]; then
  (
    p=$PATH:
    set -f
    IFS=:
    set -- $p
    echo "$# element(s):"
    printf '"%s"\n' "$@"
  )
else
  echo "PATH unset"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.