pushd এবং popd কমান্ডগুলো বাশ শেলের বিল্ট-ইন ফিচার যা আপনাকে ডিরেক্টরি "বুকমার্ক" করে আপনার হার্ড ড্রাইভের বিভিন্ন লোকেশন মধ্যে দ্রুত নেভিগেট করতে সাহায্য করে। আপনি ইতিমধ্যে অনুভব করতে পারেন যে টার্মিনাল আপনার কম্পিউটার নেভিগেট করার জন্য অসম্ভব গতির একটি পথ; শুধু কিছু কীপ্রেসে আপনি আপনার হার্ড ড্রাইভ, অ্যাটাচড স্টোরেজ, বা নেটওয়ার্ক শেয়ারের যেকোনো জায়গায় যেতে পারেন। কিন্তু সেই গতি ভাঙতে পারে যখন আপনি বারবার দুটি ডিরেক্টরির মধ্যে आगे-पीछे যান, অথবা আপনার ফাইলসিস্টেমে "হাতের মুঠোয়" হয়ে যান। এগুলোই সঠিক সমস্যাগুলো যা pushd এবং popd সমাধান করতে পারে।
pushd
সর্বৌনিম্ন স্তরে, pushd অনেকটাই cd-এর মতো। এটি আপনাকে একটি ডিরেক্টরি থেকে অন্য ডিরেক্টরিতে নিয়ে যায়। অনুমান করুন আপনার একটি ডিরেক্টরি আছে one, যার ভিতরে একটি সাবডিরেক্টরি two, যার ভিতরে আবার three, ইত্যাদি। যদি আপনার কারেন্ট ওয়ার্কিং ডিরেক্টরি one হয়, তবে আপনি cd কমান্ড দিয়ে two বা three বা যেকোনো জায়গায় যেতে পারেন:
$ pwd one $ cd two/three $ pwd three
আপনি pushd দিয়েও একই কাজ করতে পারেন:
$ pwd one $ pushd two/three ~/one/two/three ~/one $ pwd three
pushd-এর শেষ ফলাফল cd-এর মতোই, কিন্তু একটি অতিরিক্ত মধ্যবর্তী ফলাফল আছে: pushd আপনার ডেস্টিনেশন ডিরেক্টরি এবং আপনার উৎপত্তি পয়েন্ট ইহো করে। এটিই আপনার ডিরেক্টরি স্ট্যাক, এবং এটি pushd-কে уникал করে তোলে।
স্ট্যাক
কম্পিউটার টার্মিনোলজিতে, একটি স্ট্যাক বলতে একটি এলিমেন্ট সংগ্রহকে বোঝায়। এই কমান্ডের প্রেক্ষাপটে, এলিমেন্টগুলো হলো আপনি pushd কমান্ড ব্যবহার করে gầniai যে ডিরেক্টরিগুলো ভিজিট করেছেন। আপনি এটিকে একটি ইতিহাস বা ব্রেডক্রাম্ব ট্রেল হিসেবে ভাবতে পারেন।
আপনি 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 ডিরেক্টরি স্ট্রাকচারের ভিতরে অনেক কাজ করছেন। আপনি জানেন আপনি one-এ gầniai গিয়েছিলেন, কিন্তু আপনার pushd স্টকে সেটি কোথায় সেটি মনে নেই। আপনি +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
০ থেকে শুরু করে (আপনার বর্তমান লোকেশন এবং স্ট্যাকের প্রথম এন্ট্রি), আপনার স্ট্যাকের দ্বিতীয় এলিমেন্ট হলো ~/one, যা আপনার kívchnত গন্তব্য। আপনি +2 অপশন ব্যবহার করে স্ট্যাকে অগ্রসর होতে পারেন:
$ pushd +2 ~/one ~/one/two/three/four/five ~/one/two/three/four ~/one/two/three $ pwd ~/one
এটি আপনার ওয়ার্কিং ডিরেক্টরি ~/one-এ পরিবর্তন করে এবং স্ট্যাকটিকেও শিফট করে যাতে আপনার নতুন লোকেশন ফ্রন্টে থাকে।
আপনি স্ট্যাকে পিছনেও যেতে পারেন। উদাহরণস্বরূপ, উপরের আউটপুট অনুযায়ী ~/one/two/three-এ দ্রুত যেতে চাইলে, ০ থেকে শুরু করেও এক ধাপ পিছনে যেতে পারেন:
$ pushd -0 ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four
স্ট্যাকে যোগ করা
আপনি এইভাবে আপনার স্ট্যাক নেভিগেট করতে থাকতে পারেন, এবং এটি আপনার gầniai ভিজিট করা ডিরেক্টরির একটি স্ট্যাটিক লিস্টিং হিসেবে থাকবে। আপনি যদি একটি ডিরেক্টরি যোগ করতে চান, শুধু ডিরেক্টরির পথ দিন। যদি একটি ডিরেক্টরি স্ট্যাকে নতুন হয়, এটি আপনার আশা অনুযায়ী লিস্টে যোগ হবে:
$ 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 আপনার কারেন্ট ওয়ার্কিং ডিরেক্টরি। প্রথম (বা "জিরোথ", আপনি পছন্দ করলে) এলিমেন্ট সরাতে:
$ pwd ~/one $ popd +0 /tmp ~/one/two/three ~/one ~/one/two/three/four/five ~/one/two/three/four $ pwd ~/one
অবশ্যই, আপনি যেকোনো এলিমেন্ট সরাতে পারেন, ০ থেকে গণনা শুরু করে:
$ pwd ~/one $ popd +2 /tmp ~/one/two/three ~/one/two/three/four/five ~/one/two/three/four $ pwd ~/one
আপনি স্ট্যাকের পিছন থেকে popd ব্যবহার করতে পারেন, আবার ০ দিয়ে শুরু করে। উদাহরণস্বরূপ, আপনার স্ট্যাক থেকে ফাইনাল ডিরেক্টরি সরাতে:
$ popd -0 /tmp ~/one/two/three ~/one/two/three/four/five
এভাবে ব্যবহৃত হলে, popd আপনার ওয়ার্কিং ডিরেক্টরি পরিবর্তন করে না। এটি শুধু আপনার স্ট্যাক ম্যানিপুলেট করে।
popd দিয়ে নেভিগেট করা
popd-এর ডিফল্ট বিহেভিয়ার, কোনো আর্গুমেন্ট না দিলে, হলো আপনার স্ট্যাক থেকে প্রথম (জিরোথ) আইটেম সরিয়ে পরবর্তী আইটেমকে আপনার কারেন্ট ওয়ার্কিং ডিরেক্টরি করা।
এটি সবচেয়ে উপকারী কুইক-চেঞ্জ কমান্ড হিসেবে, যখন আপনি দুটি আলাদা ডিরেক্টরিতে কাজ করছেন এবং একটু দূরে যেতে হয় অন্য কোথাও। আপনাকে আপনার ডিরেক্টরি স্ট্যাক সম্পর্কে চিন্তা করতে হবে না যদি আপনাকে একটি জটিল ইতিহাসের দরকার না হয়:
$ pwd ~/one $ pushd ~/one/two/three/four/five $ popd $ pwd ~/one
আপনাকে pushd এবং popd দ্রুত সাকসাতে ব্যবহার করতে বাধ্য নন। আপনি pushd ব্যবহার করে একটি আলাদা লোকেশন যেতে পারেন, তারপর তিন ঘন্টা ব্যাগ খুঁজে বের করতে বা রিসার্চ করতে ব্যস্ত থাকতে পারেন, আপনি আপনার ডিরেক্টরি স্ট্যাক ধৈর্য haqq 기다리고 পাবেন (যদি আপনি আপনার টার্মিনাল সেশন এন্ড না করেন):
$ pwd ~/one
$ pushd /tmp
$ cd {/etc,/var,/usr}; sleep 2001
[...]
$ popd
$ pwd
~/one
বাস্তব জগতে pushd এবং popd
pushd এবং popd কমান্ডগুলো আশ্চর্য পরিমাণে উপকারী। একবার শিখলে, আপনি সেগুলো ভালো ব্যবহার করার بہানা খুঁজে পাবেন, এবং ডিরেক্টরি স্ট্যাক কনসেপ্টের সাথে পরিচিত হবেন। pushd-এর সাথে কंফার্টেবল হওয়াই আমাকে git stash বুঝতে সাহায্য করেছিল, যা pushd-এর সাথে সম্পূর্ণ অসম্পর্কিত কিন্তু কনসেপচুয়ালি একই রকম अमূর্ত।
শেল স্ক্রিপ্টে pushd এবং popd ব্যবহার করা লुभাবন, কিন্তু সাধারণত এগুলো এড়ানো ভালো। বাশ এবং জশ ছাড়া এগুলো পোর্টেবল নয়, এবং স্ক্রিপ্ট পুনরায় পড়ার সময় opaque হতে পারে (pushd +3 হলো cd $HOME/$DIR/$TMP বা সাদৃশ্যের চেয়ে কম স্পষ্ট)।
এই সতর্কতা দিয়ে থাকলে, আপনি যদি একজন রেগুলার বাশ বা জশ ব্যবহারকারী হন, তবে আপনি pushd এবং popd ব্যবহার করতে পারেন এবং ব্যবহার করা উচিত।