মাল্টি-লাইন সিনট্যাক্স ব্যবহার করে PATH এ পাথ যুক্ত করা


16

যতদূর আমি বুঝতে পারি, PATHপরিবেশের পরিবর্তনশীলটিতে একটি পথ যুক্ত করার স্বাভাবিক উপায় হ'ল :চরিত্র দ্বারা পৃথকীকৃত পথগুলি সংক্ষেপণ করে ।

উদাহরণ হিসেবে বলা যায়, আমি এটা তিন পাথ যোগ করতে চান তবে /my/path/1, /my/path/2এবং /my/path/3, আমি এটা নিম্নরূপ যা করতে হবে হবে:

PATH=$PATH:/my/path/1:/my/path/2:/my/path/3

যা পড়া সহজ নয়।

বহু-লাইন সিনট্যাক্স ব্যবহার করে ভেরিয়েবলের সংজ্ঞা বা পাথ যুক্ত করার কোনও উপায় আছে কি ? সম্ভবত অ্যারে ব্যবহার করছেন? আমি এই জাতীয় কিছু খুঁজছি:PATH

PATH = 
$PATH
/my/path/1
/my/path/2
/my/path/3

যদি আকর্ষণীয় সমাধানগুলি থাকে যা শেল নির্দিষ্ট হয় তবে আমি zsh এর সমাধান খুঁজছি।

উত্তর:


12

এটি zsh এ কাজ করে কিনা আমি জানি না তবে এটি ব্যাশে কাজ করে:

PATH=$(paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)

সম্পাদনা করুন এবং আরও ছোট:

PATH=`paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF`

এবং কোনও প্রক্রিয়া তৈরি না করে:

new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"

ডবল কোট গুরুত্বপূর্ণ arround $PATH, $IFS, ${new_path[*]}এবং $OLD_IFSIFS এর ভেরিয়েবল এবং এড়ানোর শেল ব্যাখ্যার মধ্যে শূণ্যস্থান রাখা।

আপডেট 2 মন্তব্য এবং খালি লাইন পরিচালনার সাথে সেড ব্যবহার করে:

PATH=`sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s 
$PATH
/my/path/1
# This is a comment.
/my/path/2

/my/path/3
EOF`

মন্তব্যের অক্ষরটি অবশ্যই লাইনের 1 ম চর এবং খালি লাইনগুলি সম্পূর্ণ খালি হওয়া উচিত। মন্তব্যের আগে এবং খালি লাইনে স্পেস এবং ট্যাবগুলি পরিচালনা করতে, sed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'dপরিবর্তে ব্যবহার করুন (ট্যাবগুলি পরীক্ষা করার জন্য এটি সেড প্রয়োগের জন্য নির্দিষ্ট হতে পারে)।


আমি zsh এ শেষ স্নিপেটটি পরীক্ষা করেছি এবং এটি কাজ করে। আমি এটিও পছন্দ করি যে এটি অন্যান্য সমাধানের তুলনায় কিছুটা ক্লিনার (প্রতি লাইনে একটি পথ)। সমাধান মন্তব্য মন্তব্য করা লাইন (পথ) সমন্বিত করতে পারেন? খালি লাইন সম্পর্কে কী?
আমেলিও ওয়াজকেজ-রেইনা

মন্তব্য এবং খালি লাইন পরিচালনার সাথে আপডেট করুন।
jfg956

এবং সেড সহ, যদি আপনি খেলতে চান তবে আপনি আরও জটিল স্ক্রিপ্টের সাহায্যে পেস্ট প্রক্রিয়াটি এড়াতে পারবেন।
jfg956

pasteসমাধানের পথগুলির জন্য ইন্ডেন্টেশন ব্যবহার করা কি ঠিক হবে ?
void.pointer

20

মোটেও একটি আকর্ষণীয় সমাধান নয়, তবে খুব বহনযোগ্য:

PATH=${PATH}:/my/path/1
PATH=${PATH}:/my/path/2
PATH=${PATH}:/my/path/3

1
এটি আমি বছরের পর বছর ধরে যা দেখেছি তার সাধারণ is কেউ সহজেই পাথগুলি পুনঃক্রম করতে পারে বা এমনকী একটি উপাদানকে PATH = / আমার / পথ / 1 হিসাবে পরিবর্তন করতে পারে: $ AT PATH prep প্রিপেন্ডিংয়ে বাধ্য করতে।
বিএসডি

1
আপনি +=স্ট্রিংটি পুরোপুরি পুনর্নির্মাণ করতে এড়াতেও ব্যবহার করতে পারেন।
ক্রিস ডাউন

এমনকি আপনার ধনুর্বন্ধনী ব্যবহার করার প্রয়োজন নেই। কলোনগুলি পরিবেশের পরিবর্তনশীল নামগুলিতে ব্যবহার করা যাবে না যাতে সমাধানের কোনও অস্পষ্টতা নেই।
অ্যালেক্সিয়াস

আকর্ষণীয় না হওয়ার জন্য +1। আকর্ষণীয় কখনও কখনও ভাল হতে পারে, কিন্তু এটি সেই সময়ের মধ্যে একটি নয়! (বিশেষত যেহেতু ওপি স্পষ্টভাবে সমস্যা হিসাবে "পড়া সহজ নয়" বলে উল্লেখ করেছে)
রুখ

@ ক্রিসডাউন এখানে এমন একটি বাক্য গঠন আছে যা স্ট্রিংটি পুনর্নির্মাণ না করে প্রিপেন্ড করে?
জন পি

12

Zsh এ, $pathএকটি অ্যারে:

path=(
    $path
    ~/.local/bin
    ~/.gem/ruby/2.0.0/bin
)

দ্রষ্টব্য: উভয়ই pathছোট হাতের অক্ষর।


এটি শেলের উপর নির্ভর করে, এটি সমস্ত হ্যান্ডেল করে না।
ভনব্র্যান্ড

1
@ ভনব্র্যান্ড: হ্যাঁ, তবে zsh এ কাজ করে। আমি উল্লেখ করা ভাল মনে করি।
কাবি

3
+1 (এই প্রশ্নটি zsh ট্যাগ করা হয়েছে )
জনসিওয়েব

যেহেতু ওপি বিশেষত zsh সম্পর্কে জিজ্ঞাসা করেছে, এটি সেরা বিকল্প
ড্যানিয়েল সেরোদিও

1
vs পথ বনাম $ পথের পার্থক্য সম্পর্কে আরও জানতে আগ্রহী যে কেউ এই পোস্টটি দেখুন
এমবিগ্রাস

7

Zsh এ, আপনি যদি পথের শেষে ডিরেক্টরিগুলি যুক্ত করছেন:

path+=/my/path/1
path+=/my/path/2
path+=(/path/to/app/{i386,share}/bin)

বহনযোগ্য: PATH- এ কীভাবে কোনও পথ যুক্ত করবেন?

আপনি বিদ্যমান ডিরেক্টরি বা এ জাতীয় প্রতীকী লিঙ্ক নয় এমন এন্ট্রিগুলি বাদ দিতে গ্লোব কোয়ালিফায়ার ব্যবহার করতে পারেন । আপনি সম্ভবত অধিবেশন চলাকালীন ডিরেক্টরিগুলি যুক্ত করার আশা করছেন কিনা তার উপর নির্ভর করে এটি পছন্দসই বা নাও হতে পারে (উদাহরণস্বরূপ যদি সেগুলি দূরবর্তী ফাইল সিস্টেমে থাকে)। আপনি path+=/my/pathসিনট্যাক্সের সাহায্যে এটি করতে পারবেন না কারণ ডান হাতটি একটি স্ট্রিং প্রসঙ্গে এবং তাই গ্লোব্বিংয়ের মধ্য দিয়ে যায় না; আপনার সাথে এটা করতে পারেন path+=(/my/path)যেহেতু প্রতিটি অ্যারের উপাদান একটি তালিকা প্রেক্ষাপটে সম্প্রসারিত করা হয়।

path+=(/path/to/app/{i386,share}/bin(-/N))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.