বাশে $ {GZIP_BINDIR - '/ বিন' of এর অর্থ কী?


13

এই আদেশের অর্থ কি কেউ ব্যাখ্যা করতে পারেন?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH

উত্তর:


19

${GZIP_BINDIR-'/bin'}একটি bashপ্যারামিটার সম্প্রসারণ নিদর্শন। থেকে man bash:

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

এই অংশটির অব্যবহিত পূর্বে ম্যান পেজে রয়েছে (অবহিত করার জন্য @ জাওদদারকে ধন্যবাদ):

Omitting the colon results in a test only for a parameter that is unset.

ম্যানপেজটি যেমন বলেছে, এটি ভেরিয়েবলের ডিফল্ট মান সেট করবে GZIP_BINDIR। যদি GZIP_BINDIRপূর্বে কোনও মান সেট থাকে (আপনি ব্যবহার করছেন না এমনভাবে নাল ব্যতীত :) তবে সেই মানটি ব্যবহৃত /binহবে , অন্যথায় ভেরিয়েবলের মান হিসাবে ব্যবহৃত হবে GZIP_BINDIR

অন্যদিকে আপনি যদি নাল মানগুলিরও পরীক্ষা করতে চান তবে এই প্যাটার্নটি ব্যবহার করুন (অন্তর্ভুক্ত করুন :):

${GZIP_BINDIR:-'/bin'}

এরপরে $PATHইচ্ছেটি আগে ধারণ করা মানগুলিতে প্রসারিত হবে। সুতরাং, যদি PATHআগে ছিল:

/usr/sbin:/usr/bin

এখন আপনার PATHইচ্ছা (বিবেচনা GZIP_BINDIRসেট করা নেই):

/bin:/usr/sbin:/usr/bin

export PATHPATHএটি সমস্ত শিশু প্রক্রিয়াগুলিতে উপলব্ধ করবে ।


" আমি মনে করি আপনি:${GZIP_BINDIR-'/bin'} " এটিকে মিস করেছেন "অগত্যা নয়। ${parameter-word}এটি বৈধ, যদিও ম্যান পৃষ্ঠায় নেই বলে মনে হচ্ছে।
nyuszika7h

@ nyuszika7h হ্যাঁ..আমি এটা আগে জানতাম না..আর কেন ম্যানপেজে অন্তর্ভুক্ত করা হয়নি তা জানুন ..
হিমাইল

আমার কম্পিউটারে ব্যাশ র manpage সালে বিভাগে উপরের অনুচ্ছেদ ডান :-বলেছেন: "যখন সম্প্রসারণ সাবস্ট্রিং করণ না, ফর্ম নিচে নথিভুক্ত ব্যবহার (যেমন, :-), একটি প্যারামিটার যে সেট না বা নাল জন্য ব্যাশ পরীক্ষা। কোলন ছেড়ে যাওয়া হচ্ছে আনসেট না হওয়া পরামিতিগুলির জন্য কেবলমাত্র পরীক্ষার ফলাফল ""
জওদার ২

পার্শ্ব-নোট হিসাবে, আপনি নিম্নোক্তভাবে সেটিং PATHএবং exportএকটি একক কমান্ডের সাথে একত্রিত করতে পারেন :export PATH="${GZIP_BINDIR-'/bin'}:$PATH"
ধানের ল্যান্ডাউ

8

প্যারামিটার বিস্তারের ভিতরে হাইফেনের আগে আসলেই কোনও কোলন নেই ${GZIP_BINDIR-'/bin'}?

এই ধরণের কনস্ট্রাক্টটি প্রায়শই কোলনের সাথে লেখা থাকে, ${GZIP_BINDIR:-'/bin'}যার অর্থ, "যদি $ জিজেপআইবিআইএনডিআইআর নিল বা সেট না করে থাকে তবে এটি '/ বিন' এ সেট করুন"

যাইহোক, সিনট্যাক্স আপনি সরবরাহকৃত হয় বৈধ, কিন্তু বিরল। ${GZIP_BINDIR-'/bin'}(কোনও কোলন নেই) এর অর্থ, "যদি $ GZIP_BINDIR সেট না করে থাকে তবে এটি '/ বিন' এ সেট করুন। যদি এটি সেট করা থাকে (ঘোষিত হয়েছে) তবে এতে কিছু বরাদ্দ করা হয়নি (যেমন এটি NULL) কিছুই .োকানো হবে না।

যদিও কোলন যেমন একটি বাগ এখানে হতে পারে নিম্নলিখিত পরিবর্তনশীল কনস্ট্রাক্ট (...} :$ PATH- ...) হবে এখনও যদি $ GZIP_BINDIR সেট কিন্তু শূন্য সন্নিবেশিত হবে। যেহেতু এটি AT PATH এর শুরুতে একটি কোলন যুক্ত করবে, এটি বর্তমান ডিরেক্টরিটি প্রথমে অনুসন্ধানের কারণ হবে।

এটিকে সিকিউরিটি সমস্যা হিসাবে বিবেচনা করা হয় কারণ এটি কেবলমাত্র বর্তমান ডিরেক্টরিতে রেখে কেবল স্ট্যান্ডার্ড কমান্ড হিসাবে একই নামে একটি দূষিত প্রোগ্রাম চালানো সহজ করে তোলে।

যদি $ GZIP_BINDIR সেট করা থাকে তবে NULL (খালি) হয় তবে সঠিক বাক্য গঠনটি $ PATH অপরিবর্তিত রয়েছে ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

$ GZIP_BINDIR হয় যদি সেট না করে সেট করা থাকে বা সেট করা থাকে তবে NULL হয় তবে সঠিক বাক্য গঠনটি $ PATH অপরিবর্তিত রয়েছে ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH


2

এই কমান্ডটি PATH ভেরিয়েবল আপডেট করে।

PATHডিরেক্টরি যেখানে এক্সিকিউটেবল প্রোগ্রাম অবস্থিত হয় একটি সেট উল্লেখ একটি পরিবেশ পরিবর্তনশীল।

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

এটি GZIP_BINDIRপূর্বের PATH থেকে প্রস্থান করলে অন্য পরিবর্তকের মান যুক্ত করে অন্য পরিবর্তে / বিন ব্যবহার করুন এবং এটি PATH এ যুক্ত করুন

export PATH

রপ্তানি সব শিশু প্রসেসের জন্য পাথ প্রাপ্তিসাধ্য সেট করতে ব্যবহার করা হয় এবং পড়ুন subshells হয় এই সম্পর্কে আরও তথ্যের জন্য

আপনার অবশ্যই অবশ্যই লক্ষ্য রাখতে হবে যে এটি অচল নয় এবং একবার আপনি নিজের শেলটি প্রস্থান করার পরে আপনি এটিকে আলগা করবেন।

এই পাঠ্য সম্পাদনা স্থায়ী করতে আপনার নিজের মধ্যে এই লাইনগুলি যুক্ত করতে হবে .bashrc

gedit .bashrc

এবং লাইন যোগ করুন

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

তারপর কমান্ড চালান

source .bashrc

GZIP_BINDIR পরিবর্তনশীল
মেথাক্স

কি ঠিক না? না আমি করিনি? খনি এছাড়াও downvoted হয়
Maythux

ডাউনভিটিং কেন ?!
মেথাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.