বাশ কমান্ড
cd -
পূর্বে ব্যবহৃত ডিরেক্টরি মুদ্রণ করে এবং এতে পরিবর্তন করে।
অন্যদিকে, বাশ কমান্ড
cd ~-
কোনও কিছু প্রতিধ্বনিত না করে সরাসরি পূর্বে ব্যবহৃত ডিরেক্টরিতে পরিবর্তিত হয়।
এটাই কি একমাত্র পার্থক্য? কমান্ডের প্রতিটি ব্যবহার ক্ষেত্রে কি?
বাশ কমান্ড
cd -
পূর্বে ব্যবহৃত ডিরেক্টরি মুদ্রণ করে এবং এতে পরিবর্তন করে।
অন্যদিকে, বাশ কমান্ড
cd ~-
কোনও কিছু প্রতিধ্বনিত না করে সরাসরি পূর্বে ব্যবহৃত ডিরেক্টরিতে পরিবর্তিত হয়।
এটাই কি একমাত্র পার্থক্য? কমান্ডের প্রতিটি ব্যবহার ক্ষেত্রে কি?
উত্তর:
এখানে দুটি জিনিস খেলছে। প্রথমত, -একা আপনার পূর্ববর্তী ডিরেক্টরিতে প্রসারিত হয়। এটি (জোর খনির) cdঅংশে ব্যাখ্যা করা হয়েছে man bash:
-ডিরেক্টরি পরিবর্তনের চেষ্টা করার আগে একটি আর্গুমেন্টকে DP OLDPWD এ রূপান্তর করা হয়। সিডিপিএটিএইচএইচএইচ থেকে কোনও খালি খালি ডিরেক্টরি নাম ব্যবহার করা হয়, বা যদি-প্রথম যুক্তি হয় এবং ডিরেক্টরি পরিবর্তন সফল হয় তবে নতুন কার্যকারী ডিরেক্টরিটির পরম পাথনামটি স্ট্যান্ডার্ড আউটপুটটিতে লেখা হয়। ডিরেক্টরিটি সফলভাবে পরিবর্তিত হলে রিটার্ন মানটি সত্য; অন্যথায় মিথ্যা।
সুতরাং, একটি সাধারণ cd -আপনাকে আপনার পূর্ববর্তী ডিরেক্টরিতে ফিরিয়ে নিয়ে যায় এবং ডিরেক্টরিটির নাম মুদ্রণ করে। অন্যান্য কমান্ডটি "টিলডে সম্প্রসারণ" বিভাগে নথিভুক্ত করা হয়েছে:
টিল্ড-উপসর্গটি যদি একটি
~+হয় তবে শেল ভেরিয়েবল পিডাব্লুডির মান টিল্ড-উপসর্গটি প্রতিস্থাপন করে। টিল্ড-উপসর্গটি যদি একটি হয়~-, শেল ভেরিয়েবল ওলডিপিডাব্লুডি এর মান সেট করা থাকে তবে এটি প্রতিস্থাপিত হয়। টিলড-উপসর্গের টিলডের পরবর্তী অক্ষরগুলি যদি একটি N নম্বর নিয়ে গঠিত হয়, aচ্ছিকভাবে একটি+বা a দ্বারা-উপসর্গ করা থাকে, তবে টিল্ড-উপসর্গটি ডিরেক্টরি স্ট্যাক থেকে সংশ্লিষ্ট উপাদানটির সাথে প্রতিস্থাপন করা হবে, কারণ এটি ডায়ার বিল্টইন দ্বারা প্রদর্শিত হবে আর্গুমেন্ট হিসাবে টিলডে উপসর্গ। তাহলে টিল্ড-prefix মধ্যে টিল্ড নিম্নলিখিত অক্ষরগুলি একটি নেতৃস্থানীয় ছাড়া একটি সংখ্যা দ্বারা গঠিত+অথবা-,+অধিকৃত হয়।
এটি উদাহরণ সহ বোঝা সহজ হতে পারে:
$ pwd
/home/terdon
$ cd ~/foo
$ pwd
/home/terdon/foo
$ cd /etc
$ pwd
/etc
$ echo ~ ## prints $HOME
/home/terdon
$ echo ~+ ## prints $PWD
/etc
$ echo ~- ## prints $OLDPWD
/home/terdon/foo
সুতরাং, সাধারণভাবে, এর -অর্থ "পূর্ববর্তী ডিরেক্টরি"। সে কারণেই cd -নিজেই আপনাকে যেখানেই ছিল সেখানে ফিরিয়ে আনবে।
মূল পার্থক্যটি হ'ল বিল্টিনের সাথে cd -নির্দিষ্ট cd। আপনি যদি echo -এটি চেষ্টা করেন তবে এটি একটি মুদ্রণ করবে -। ~-টিল্ড সম্প্রসারণ কার্যকারিতা অংশ এবং একটি পরিবর্তনশীল একইভাবে আচরণ করে। এজন্য আপনি echo ~-কিছু অর্থবহ পেতে পারেন । আপনি এটিতে এটি ব্যবহার করতে পারেন cd ~-তবে আপনি এটি অন্য কোনও কমান্ডে ব্যবহার করতে পারেন। উদাহরণস্বরূপ cp ~-/* .যা সমান হবেcp "$OLDPWD"/* .
set -xকার্যকর করার আগে প্রসারিত কমান্ড মুদ্রণ করতে পার্থক্যটি চিত্রিত করার জন্য কার্যকর হতে পারে (বা আপনি যখন একবারে এক পদক্ষেপ নিজেই করছেন না তখন কেবল অপঠিত গোলমাল হতে পারেন)।
cd ~-/..কাজ, cd -/..না!
~-টিলডে সম্প্রসারণ সাপেক্ষে (ম্যান বাশ দেখুন), তাই যা cdদেখায় তা পূর্ববর্তী ডিরেক্টরি নামটি সরাসরি। -শেল দ্বারা প্রসারিত হয় না, cdএটি সরাসরি দেখায় এবং নথি হিসাবে আচরণ করে:
এর একটি আর্গুমেন্ট $ OLDPWD এর সমতুল্য। সিডিপিএটিএইচএইচএইচটিএচ থেকে একটি খালি খালি ডিরেক্টরি ব্যবহার করা হয়, বা যদি - প্রথম যুক্তি হয়, এবং ডিরেক্টরি পরিবর্তন সফল হয় তবে নতুন কার্যকারী ডিরেক্টরিটির পরম পাথনামটি স্ট্যান্ডার্ড আউটপুটটিতে লেখা হয়।
টিএল; ডিআর: এতে cd -অন্তর্নির্মিত হয় cd, ~-এটি পরে ~[name]নির্দিষ্ট হয়, এটি নির্দিষ্ট নয় cd।
POSIX.1-2-2008 শেল এবং ইউটিলিটিসcd - একটি বিশেষ কেস হিসাবে সংজ্ঞা দেয় যা কমান্ডের জন্য নির্দিষ্ট :cd
যখন একটি
-অপারেন্ড হিসাবে ব্যবহৃত হয়, এটি আদেশের সমতুল্য হবে:
cd "$OLDPWD" && pwdযা পূর্ববর্তী কার্যনির্বাহী ডিরেক্টরিতে পরিবর্তিত হয় এবং এরপরে তার নামটি লেখায়।
কোনও কমান্ড কার্যকর হওয়ার আগে এই ~-এক্সটেনশানটি প্রসারিত হবে $OLDPWDএবং যে কোনও কমান্ডের আর্গুমেন্ট হিসাবে পাস করা যেতে পারে, কেবল তা নয় cd। এটা পরবর্তী এক্সটেনশান ksh এবং ব্যাশ ।
পূর্বোক্ত POSIX.1-2-2008 শেল এবং ইউটিলিটিস স্ট্যান্ডার্ডে টিলডে সম্প্রসারণের বিস্তৃত ব্যাখ্যা রয়েছে । ~-স্ট্যান্ডার্ডের ক্ষেত্রের মধ্যে অপরিজ্ঞাত আচরণ হিসাবে অনুমতি দেওয়ার জন্য শব্দটি খুব নির্দিষ্ট , যেখানে খালি স্ট্রিং কিনা তা ~[name]বোঝায় বা ব্যবহারকারীর হোম ডিরেক্টরি যদি কোনও বৈধ ব্যবহারকারীর নাম হয়।$HOME[name]namename
cd ~-।