গ্লোবিগনোর কীভাবে কাজ করে?


15

বাশের ম্যানুয়াল পৃষ্ঠা অনুসারে:

   GLOBIGNORE
          A colon-separated list of patterns defining the set of filenames
          to be ignored by pathname expansion.  If a filename matched by a
          pathname  expansion  pattern also matches one of the patterns in
          GLOBIGNORE, it is removed from the list of matches.

তবে অনুশীলনে ...

$ bash --noprofile --norc
bash-4.2$ touch .bar
bash-4.2$ echo .*
. .. .bar
bash-4.2$ GLOBIGNORE=.
bash-4.2$ echo .*
.bar

..ম্যাচের তালিকা থেকে কেন সরানো হচ্ছে ? আমি যতদূর জানি, প্যাটার্নটি .মেলে না .., এটি কি?

উত্তর:


14

স্ক্রোল ডাউন

ফাইলের নামের .এবং ..যখন সবসময় উপেক্ষা করা হয় GLOBIGNOREসেট এবং নয় নাল।

বেশিরভাগ সময় অন্তর্ভুক্ত করা .বা ..ওয়াইল্ডকার্ডের ম্যাচগুলির মতো হওয়া বাঞ্ছনীয় নয় , যেহেতু তারা ডিরেক্টরিতে থাকা ফাইলগুলিকে প্রতিনিধিত্ব করে না - ডিরেক্টরি নেভিগেশনের কাজ করার জন্য তারা হ্যাক're আসলে, ডট ফাইলের উত্স হ'ল কমান্ডের প্রথম সংস্করণে একটি বাগls । লেখক বোঝাতে চেয়েছিলেন .এবং ..তালিকা থেকে বাদ দিন তবে ঘটনাক্রমে শুরু হওয়া সমস্ত ফাইল বাদ দিয়েছিলেন .। এভাবে ডট ফাইলগুলি আড়াল হয়ে যায় ls। শেলগুলি ডট ফাইলের মতো গোপন করে মামলা অনুসরণ করে ls। তবে এটি যেভাবে করা হয়েছিল তা আবার একটি হ্যাক ছিল: ফাইলগুলির সূচনা .কেবলমাত্র বাদ দেওয়া হবে যদি প্যাটার্নে স্পষ্টভাবে বিন্দু মিলে না যায়। সুতরাং প্যাটার্ন .*অন্তর্ভুক্ত .এবং ..

বিদ্যমান স্ক্রিপ্টগুলির সাথে সামঞ্জস্যতা রক্ষার জন্য, আধুনিক শেলগুলি এখনও অন্তর্ভুক্ত .এবং ..(zsh ব্যতীত, যা এই ইস্যুতে অনেকের মতো স্যানার রয়েছে তবে পশ্চাদপটে সামঞ্জস্যপূর্ণ আচরণ নয়)। তবে, আপনি যদি সেট করেন GLOBIGNORE, আপনি বাশ-নির্দিষ্ট বৈশিষ্ট্যটি ব্যবহার করছেন, যা দেখায় যে আপনি পশ্চাদপটে সামঞ্জস্যের প্রতি আগ্রহী নন। সুতরাং সমস্ত প্যাটার্নের মিলগুলি বাদ দিতে .এবং প্যাটার্নের সাথে মেলে পরিবর্তনগুলি ..

সেটিং GLOBIGNORE=.এমন ফাইলকে বাদ দেয় যা যেভাবে যাইহোক GLOBIGNOREসেট করা থাকলে স্বয়ংক্রিয়ভাবে বাদ পড়ে , সুতরাং এটি shopt -s dotglobব্যতীত সমতুল্য .এবং ..তদুপরি সমস্ত প্যাটার্ন থেকে বাদ দেওয়া হয়।


1
প্রকৃতপক্ষে, আমি ঠিক বুঝতে পেরেছি যে সেটিংটি GLOBIGNOREকেবল উপেক্ষা করা উচিত .এবং ..স্ল্যাশ-কম প্যাটার্নগুলিতে এবং গ্লোবিগনোর ফাইলের নামগুলি নয় ফাইল ফাইলগুলি ফিল্টার করে। GLOBIGNORE=.; echo .*অন্তর্ভুক্ত করা হবে না .কিংবা ..কিন্তু GLOBIGNORE=.; echo ./.*(অথবা echo /bin/.*) হবে! উপেক্ষা করার জন্য .এবং ..সমস্ত গ্লোব থেকে, দেখে মনে হচ্ছে আপনার প্রয়োজন shopt -s extglobএবং GLOBIGNORE='?(*/)@(.|..)'
স্টাফেন চেজেলাস

1
আসলে, না, GLOBIGNORE='?(*/)@(.|..)'বাদ দিতে .এবং ..ভিতরে ব্যর্থ হবে .*/fooGLOBIGNORE='?(*/)@(.|..)?(/*)'./*
গ্লোবগুলি

3

"পথের নাম সম্প্রসারণ" শিরোনামে বিভাগটি থেকে man bash:

ফাইল নাম ''। '' এবং '' .. '' সর্বদা অগ্রাহ্য করা হয় যখন GLOBIGNORE সেট করা থাকে এবং শূন্য হয় না।

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