কম্পিউটার

pushd এবং popd দিয়ে Bash শেল নেভিগেট করা

ধাক্কা এবং popd আপনার হার্ড ড্রাইভের অবস্থানগুলির মধ্যে দ্রুত নেভিগেশনের জন্য নির্দেশিকাগুলিকে "বুকমার্ক" করতে সহায়তা করার জন্য কমান্ডগুলি ব্যাশ শেল-এর অন্তর্নির্মিত বৈশিষ্ট্য। আপনি ইতিমধ্যে অনুভব করতে পারেন যে টার্মিনাল আপনার কম্পিউটার নেভিগেট করার একটি অসম্ভব দ্রুত উপায়; মাত্র কয়েকটি কী প্রেসে, আপনি আপনার হার্ড ড্রাইভ, সংযুক্ত স্টোরেজ, বা নেটওয়ার্ক শেয়ারের যেকোনো জায়গায় যেতে পারেন। কিন্তু সেই গতি ভেঙ্গে যেতে পারে যখন আপনি নিজেকে ডিরেক্টরীর মধ্যে বারবার যেতে দেখেন, অথবা যখন আপনি আপনার ফাইল সিস্টেমের মধ্যে "হারিয়ে যান"। সেগুলিই হল ধাক্কা সমস্যা এবং popd আপনাকে সমাধান করতে সাহায্য করতে পারে৷

pushd

সবচেয়ে মৌলিকভাবে, পুশড অনেকটা cd এর মত . এটি আপনাকে এক ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে নিয়ে যায়। ধরুন আপনার কাছে একটি নামে একটি ডিরেক্টরি আছে , যেটিতে দুই নামে একটি সাবডিরেক্টরি রয়েছে , যেটিতে তিন নামে একটি সাবডিরেক্টরি রয়েছে , এবং তাই. যদি আপনার বর্তমান কাজের ডিরেক্টরি একটি হয় , তারপর আপনি দুই এ যেতে পারেন অথবা তিন অথবা cd সহ যেকোনো জায়গায় কমান্ড:

$ pwd
one
$ cd two/three
$ pwd
three

আপনি pushd দিয়ে একই কাজ করতে পারেন :

$ pwd
one
$ pushd two/three
~/one/two/three ~/one
$ pwd
three

pushd এর শেষ ফলাফল cd এর মতই , কিন্তু একটি অতিরিক্ত মধ্যবর্তী ফলাফল আছে:pushd আপনার গন্তব্য ডিরেক্টরি এবং আপনার মূল বিন্দু প্রতিধ্বনি। এটি আপনার ডিরেক্টরি স্ট্যাক , এবং এটিই pushd করে অনন্য।

স্ট্যাকস

একটি স্ট্যাক, কম্পিউটার পরিভাষায়, উপাদানগুলির একটি সংগ্রহকে বোঝায়। এই কমান্ডের পরিপ্রেক্ষিতে, উপাদানগুলি হল ডিরেক্টরিগুলি যা আপনি সম্প্রতি pushd ব্যবহার করে পরিদর্শন করেছেন আদেশ আপনি এটিকে ইতিহাস বা ব্রেডক্রাম্ব ট্রেইল হিসাবে ভাবতে পারেন।

আপনি pushd দিয়ে আপনার সমস্ত ফাইল সিস্টেমে যেতে পারেন; প্রতিবার, আপনার আগের এবং নতুন অবস্থানগুলি স্ট্যাকে যোগ করা হয়:

$ pushd four
~/one/two/three/four ~/one/two/three ~/one
$ pushd five
~/one/two/three/four/five ~/one/two/three/four ~/one/two/three ~/one

একবার আপনি একটি স্ট্যাক তৈরি করলে, আপনি এটিকে বুকমার্কের সংগ্রহ বা দ্রুত-ভ্রমণ পথপয়েন্ট হিসেবে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, অনুমান করুন যে একটি সেশন চলাকালীন আপনি ~/one/two/three/four/five-এর মধ্যে অনেক কাজ করছেন এই উদাহরণের ডিরেক্টরি গঠন। আপনি জানেন যে আপনি একটি এ গেছেন সম্প্রতি, কিন্তু আপনার পুশড এ এটি কোথায় অবস্থিত তা আপনি মনে করতে পারবেন না স্ট্যাক আপনি +0 দিয়ে আপনার স্ট্যাক দেখতে পারেন (এটি একটি যোগ চিহ্নের পরে একটি শূন্য) যুক্তি, যা পুশডকে বলে আপনার স্ট্যাকের কোনো ডিরেক্টরিতে পরিবর্তন করার জন্য নয়, তবে pushdও প্রম্পট করে আপনার বর্তমান স্ট্যাক প্রতিধ্বনিত করতে:

$ pushd +0
~/one/two/three/four ~/one/two/three ~/one ~/one/two/three/four/five

বিকল্পভাবে, আপনি dirs দিয়ে স্ট্যাকটি দেখতে পারেন কমান্ড, এবং আপনি -v ব্যবহার করে প্রতিটি ডিরেক্টরির জন্য সূচক নম্বর দেখতে পারেন বিকল্প:

$ dirs -v
0  ~/one/two/three/four
1  ~/one/two/three
2  ~/one
3  ~/one/two/three/four/five

আপনার স্ট্যাকের প্রথম এন্ট্রি হল আপনার বর্তমান অবস্থান। আপনি pwd দিয়ে নিশ্চিত করতে পারেন যথারীতি:

$ pwd
~/one/two/three/four

0 থেকে শুরু হচ্ছে (আপনার বর্তমান অবস্থান এবং আপনার স্ট্যাকের প্রথম এন্ট্রি), দ্বিতীয় আপনার স্ট্যাকের উপাদান হল ~/one , যা আপনার কাঙ্খিত গন্তব্য। আপনি +2 ব্যবহার করে আপনার স্ট্যাকে এগিয়ে যেতে পারেন বিকল্প:

$ pushd +2
~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three
$ pwd
~/one

এটি আপনার কাজের ডিরেক্টরিকে ~/one এ পরিবর্তন করে এবং স্ট্যাকটি স্থানান্তরিত করেছে যাতে আপনার নতুন অবস্থান সামনে থাকে।

আপনি আপনার স্ট্যাকে পিছনে যেতে পারেন. উদাহরণস্বরূপ, দ্রুত ~/one/two/three এ যেতে উদাহরণের আউটপুট দেওয়া, আপনি pushd মনে রেখে একের পর এক পিছিয়ে যেতে পারেন 0 দিয়ে শুরু হয়:

$ pushd -0
~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

স্ট্যাকে যোগ করা

আপনি এইভাবে আপনার স্ট্যাক নেভিগেট করা চালিয়ে যেতে পারেন এবং এটি আপনার সাম্প্রতিক পরিদর্শন করা ডিরেক্টরিগুলির একটি স্ট্যাটিক তালিকা থাকবে। আপনি যদি একটি ডিরেক্টরি যোগ করতে চান, শুধু ডিরেক্টরির পথ প্রদান করুন। যদি কোনো ডাইরেক্টরি স্ট্যাকের জন্য নতুন হয়, তাহলে আপনি যেমনটি আশা করেন ঠিক তেমনটি তালিকায় যোগ করা হয়:

$ pushd /tmp
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

কিন্তু যদি এটি ইতিমধ্যেই স্ট্যাকে বিদ্যমান থাকে, তাহলে এটি দ্বিতীয়বার যোগ করা হয়:

$ pushd ~/one
~/one /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four

যদিও স্ট্যাকটি প্রায়ই ডাইরেক্টরির তালিকা হিসাবে ব্যবহার করা হয় যাতে আপনি দ্রুত অ্যাক্সেস চান, এটি সত্যিই আপনি যেখানে ছিলেন তার একটি সত্য ইতিহাস। আপনি যদি স্ট্যাকের সাথে অপ্রয়োজনীয়ভাবে একটি ডিরেক্টরি যোগ করতে না চান তবে আপনাকে অবশ্যই +N ব্যবহার করতে হবে এবং -N স্বরলিপি।

স্ট্যাক থেকে ডিরেক্টরি সরানো হচ্ছে

আপনার স্ট্যাক, স্পষ্টতই, অপরিবর্তনীয় নয়। আপনি pushd দিয়ে এটিতে যোগ করতে পারেন অথবা popd দিয়ে এটি থেকে আইটেমগুলি সরান .

উদাহরণস্বরূপ, ধরে নিন আপনি এইমাত্র pushd ব্যবহার করেছেন ~/one যোগ করতে আপনার স্ট্যাকে, ~/one তৈরি করুন আপনার বর্তমান কাজের ডিরেক্টরি। প্রথম (বা "zeroeth," যদি আপনি পছন্দ করেন) উপাদানটি সরাতে:

$ pwd
~/one
$ popd +0
/tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
$ pwd
~/one

অবশ্যই, আপনি 0:

থেকে আপনার গণনা শুরু করে যেকোনো উপাদান সরাতে পারেন
$ pwd ~/one
$ popd +2
/tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four
$ pwd ~/one

আপনি popdও ব্যবহার করতে পারেন আপনার স্ট্যাকের পিছনে থেকে, আবার 0 দিয়ে শুরু। উদাহরণস্বরূপ, আপনার স্ট্যাক থেকে চূড়ান্ত ডিরেক্টরি সরাতে:

$ popd -0
/tmp ~/one/two/three ~/one/two/three/four/five

এইভাবে ব্যবহার করা হলে, popd আপনার কাজের ডিরেক্টরি পরিবর্তন করে না। এটি শুধুমাত্র আপনার স্ট্যাক ম্যানিপুলেট করে৷

popd-এর ডিফল্ট আচরণ , কোন যুক্তি না দেওয়া হল, আপনার স্ট্যাক থেকে প্রথম (zeroeth) আইটেমটি সরানো এবং পরবর্তী আইটেমটিকে আপনার বর্তমান কার্যকারী ডিরেক্টরিতে পরিণত করা৷

এটি একটি দ্রুত-পরিবর্তন কমান্ড হিসাবে সবচেয়ে উপযোগী, যখন আপনি, উদাহরণস্বরূপ, দুটি ভিন্ন ডিরেক্টরিতে কাজ করছেন এবং শুধুমাত্র একটি মুহুর্তের জন্য অন্য কোনো স্থানে যেতে হবে। আপনার যদি একটি বিস্তৃত ইতিহাসের প্রয়োজন না হয় তবে আপনাকে আপনার ডিরেক্টরি স্ট্যাক সম্পর্কে চিন্তা করতে হবে না:

$ pwd
~/one
$ pushd ~/one/two/three/four/five
$ popd
$ pwd
~/one

এছাড়াও আপনাকে pushd ব্যবহার করতে হবে না এবং popd দ্রুত পর্যায়ক্রমে। আপনি যদি pushd ব্যবহার করেন একটি ভিন্ন অবস্থান পরিদর্শন করতে, তারপর একটি বাগ খুঁজে বের করতে বা গবেষণা করার জন্য তিন ঘন্টার জন্য বিভ্রান্ত হন, আপনি আপনার ডিরেক্টরি স্ট্যাকটি ধৈর্য সহকারে অপেক্ষা করতে পাবেন (যদি না আপনি আপনার টার্মিনাল সেশন শেষ করেন):

$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one

বাস্তব জগতে Pushd এবং popd

ধাক্কা এবং popd কমান্ড আশ্চর্যজনকভাবে দরকারী। একবার আপনি সেগুলি শিখলে, আপনি সেগুলিকে ভাল ব্যবহারের জন্য অজুহাত খুঁজে পাবেন এবং আপনি ডিরেক্টরি স্ট্যাকের ধারণার সাথে পরিচিত হবেন। পুশড এর সাথে আরামদায়ক হচ্ছে যা আমাকে গিট স্ট্যাশ বুঝতে সাহায্য করেছিল , যা সম্পূর্ণরূপে pushd এর সাথে সম্পর্কিত নয় কিন্তু ধারণাগত অস্পষ্টতায় একই রকম।

pushd ব্যবহার করা হচ্ছে এবং popd শেল স্ক্রিপ্টগুলিতে লোভনীয় হতে পারে, তবে সাধারণত, এগুলি এড়ানো সম্ভবত সেরা। এগুলি Bash এবং Zsh এর বাইরে পোর্টেবল নয় এবং আপনি যখন একটি স্ক্রিপ্ট (pushd +3 পুনঃপড়া করছেন তখন এগুলি অস্পষ্ট হতে পারে cd $HOME/$DIR/$TMP থেকে কম পরিষ্কার বা অনুরূপ)।

এই সতর্কতাগুলি ছাড়াও, আপনি যদি একজন নিয়মিত Bash বা Zsh ব্যবহারকারী হন, তাহলে আপনি pushd চেষ্টা করতে পারেন এবং করা উচিত এবং popd .


  1. rbash - একটি সীমাবদ্ধ ব্যাশ শেল ব্যবহারিক উদাহরণ সহ ব্যাখ্যা করা হয়েছে

  2. jm-shell - একটি অত্যন্ত তথ্যপূর্ণ এবং কাস্টমাইজড ব্যাশ শেল

  3. 6টি ব্যবহারিক উদাহরণ সহ ব্যাশ শেল ফাংশন টিউটোরিয়াল

  4. 15টি উদাহরণ সহ আলটিমেট ব্যাশ অ্যারে টিউটোরিয়াল