আমি ভাবছি, সিডি একা যদি আমাকে আমার বাড়ির ফোল্ডারে প্রেরণ করে এবং সিডিও একই কাজ করে, তবে ~ প্রথমে কেন যুক্ত হয়েছিল?
এটি কি বেসের সাথে নির্দিষ্ট কিছু বা অন্য শেলের সাথে তারা আলাদা আচরণ করবে?
আমি ভাবছি, সিডি একা যদি আমাকে আমার বাড়ির ফোল্ডারে প্রেরণ করে এবং সিডিও একই কাজ করে, তবে ~ প্রথমে কেন যুক্ত হয়েছিল?
এটি কি বেসের সাথে নির্দিষ্ট কিছু বা অন্য শেলের সাথে তারা আলাদা আচরণ করবে?
উত্তর:
এটি কেবল ~
তার চেয়ে বেশি ব্যবহার করা যেতে পারে। যে কোনও কমান্ড হোম ফোল্ডারে শর্টকাট পেয়ে লাভ করতে পারে। সুতরাং আপনি নিজের বাড়িতে সিডি করতে চাইলে এটি প্রয়োজনীয় নয় তবে কী হবে ~/.config
?
$ cd ~/.config
অন্যথায় আপনাকে ঘরের পথটি লিখতে হবে, $HOME
ভ্যার ব্যবহার করতে হবে , বা দুটি ব্যবহার করতে হবে cd
। ফাইলগুলি অনুলিপি বা সরানোর জন্য:
$ cp ~/downloads/some-file some/path/
আপনার বেশিরভাগ ফাইল বাড়িতে থাকায় একটি শর্টকাট থাকা সর্বদা ভাল।
~
করতে হয় cd ~user/download
একটি ব্যবহারকারীর ডাউনলোড ডিরেক্টরি যান।
করণটি cd
মূলত cd
কোনও তর্ক ছাড়াই এবং cd
আচরণ অনুসারে কল করা হয় "... যদি ডিয়ার সরবরাহ না করা হয় তবে হোম শেল ভেরিয়েবলের মান ডিফল্ট।" ( বাশ ম্যানুয়াল থেকে )। বিপরীতে cd ~
যখন আপনাকে যুক্তি সরবরাহ হয় cd
কমান্ড, যা হতে হবে ~
এবং শেল সঞ্চালন করা হবে সম্প্রসারণ টিল্ড । যতক্ষণ না ব্যবহারকারীর হোম ডিরেক্টরিতে ফিরে যেতে - কোনও পার্থক্য নেই। উভয় ক্ষেত্রেই, HOME
পরিবেশের পরিবর্তনশীলগুলি অনুসন্ধান করা হবে:
$ env 'HOME=/usr' bash -c 'cd;pwd; cd ~;pwd'
/usr
/usr
কার্যকরভাবে, এটির থেকেও কোনও পার্থক্য নেই cd $HOME
। তবে, যেখানে cd
কেবলমাত্র এবং কেবল একটি কাজই করা হবে, সেখানে টিলডে অন্যান্য সম্প্রসারণ যেমন ~+
বর্তমান চলমান ডিরেক্টরি নির্দেশিকা হিসাবে ব্যবহার করা যেতে পারে ।
যাইহোক, আকর্ষণীয়ভাবে যথেষ্ট আমরা unset HOME
বিরতি করতে পারি cd
তবে ~
এখনও কাজ করবে:
$ bash -c 'cd /usr;unset HOME;cd;pwd;cd ~;pwd'
bash: line 0: cd: HOME not set
/usr
/home/xieerqi
কেন? আবার, ম্যানুয়ালটিতে উত্তর দিন:
যদি হোমটি সেট না করা থাকে, তার পরিবর্তে শেল চালানো ব্যবহারকারীর হোম ডিরেক্টরিটি পরিবর্তিত করা হবে। অন্যথায়, টিলডে উপসর্গ নির্দিষ্ট লগইন নামের সাথে যুক্ত হোম ডিরেক্টরিতে প্রতিস্থাপন করা হয়।
খেয়াল করুন যে আনসেট করা আলাদা যে খালি ভেরিয়েবল তৈরি করে HOME=
এবং কার্যকর হয়। ডকুমেন্টেশন বিশেষভাবে আনসেটিং ভেরিয়েবল সম্পর্কে কথা বলে। খালি স্ট্রিংয়ের সমতুল্য ভেরিয়েবল তৈরি করা আমাদের প্রত্যাশার বিপরীতে প্রভাব ফেলে:
bash-4.3$ env 'HOME=' bash -c 'cd /usr;set|grep "^HOME"; stat -c "%F" ~;cd;pwd'
HOME=
stat: cannot stat '': No such file or directory
/usr
এখানে আপনি দেখতে পারেন যে HOME
খালি স্ট্রিং তৈরি করা টিল্ড এবং cd
আচরণ উভয়ই ভেঙে দেয় ।
টিলড এবং $HOME
কিছুটা আলাদা এবং অস্তিত্বের বিভিন্ন কারণ রয়েছে। $HOME
এটি একটি শেল ভেরিয়েবল, যা ঘটনাক্রমে পরিবেশের পরিবর্তনশীলগুলির একটি হতে পারে - এবং এটি সমস্ত প্রোগ্রামের জন্য উপলব্ধ; সি আপনি এটি environ()
অ্যাক্সেস ব্যবহার করতে হবে । বিপরীতে, tilde
শেল-নির্দিষ্ট সিনট্যাক্স যা টিল্ড সম্প্রসারণ সম্পাদন করে, যদিও আপনি wordexp()
সিতেও শেল-জাতীয় সম্প্রসারণ ( রেফারেন্স ) সম্পাদন করতে ফাংশনটি ব্যবহার করতে পারেন ।
~
প্রতিনিধিত্ব করার কারণ এই প্রশ্নেরHOME
উত্তর দেওয়া হয়েছে : একবার লিল্ড-সিগেলার এডিএম -3 এ টার্মিনালে টিল্ড চরিত্র একই চাবি ভাগ করে নিয়েছিল। বিপরীতে হ'ল পরিবেশের পরিবর্তনশীল যা খাঁটি প্রতীকী অর্থ এবং শারীরিক উপস্থাপনা ছিল না।HOME
HOME
এছাড়াও, HOME
পরিবেশের পরিবর্তনশীল এই বিষয়টি আমাদের এটিকে আনসেট করতে দেয়, যেখানে আমরা ~
সহজ উপায়ে অন্য কোনও কিছুর কাছে সেট করতে পারি না ।
# cd ~ will still work, because ~ is blank, so it's same as just cd
$ bash -c 'unset HOME; echo $HOME; cd ~;pwd'
/home/xieerqi
$ env 'HOME=' bash -c 'echo $HOME; cd ~;pwd'
/home/xieerqi
ফাঁকা রেখাটি লক্ষ্য করুন যেখানে প্রথমে echo
আনসেট ভেরিয়েবল এবং আউটপুটকে আউটপুট করে। বিপরীতে, আমরা টিলড করতে এই জাতীয় জিনিস করতে পারি না:
$ bash -c '~=; cd ~;pwd'
bash: ~=: command not found
/home/xieerqi
$ bash -c '~=$'\0'; cd ~;pwd'
bash: ~=bash: command not found
/home/xieerqi
$ bash -c 'unset ~; cd ~;pwd'
bash: line 0: unset: `/home/xieerqi': not a valid identifier
/home/xieerqi
তবে, পরিবর্তনগুলি HOME
প্রভাবিত করে ~
:
$ env 'HOME=' bash -c 'echo $HOME; stat ~;'
stat: cannot stat '': No such file or directory
~
এছাড়াও , সম্প্রসারণ চরিত্র হিসাবেও কাজ করে, আমরা বর্তমান ওয়ার্কিং ডিরেক্টরিটি দেখানোর জন্য এই জাতীয় জিনিসগুলি করতে পারি:
$ bash -c 'cd /etc/;stat -c "%n" ~+'
/etc
যদিও আমরা যদি পরিবেশের ভেরিয়েবলের মাধ্যমে এটি করতে চাই তবে আমাদের প্রয়োজন PWD
, এবং HOME
একই থাকে, বা আপনি যদি এমন কিছু করেন তবে echo $HOME+
- এটি কেবল স্ট্রিং / ভেরিয়েবল কনটেন্টেশন। কিন্তু আবার, ~+
পরিবেশের পরিবর্তনশীলগুলির বাইরে তথ্য নিয়ে যায়:
$ bash -c 'cd /etc/;PWD="/usr";stat -c "%n" ~+'
/usr
দ্রষ্টব্য : ~+
এবং ~-
সম্প্রসারণগুলি কাজ করে ksh
, কিন্তু এতে কাজ করে না dash
।
আপনার নির্দিষ্ট কিছু প্রশ্নের উত্তর দিতে:
এটি কি বেসের সাথে নির্দিষ্ট কিছু বা অন্য শেলের সাথে তারা আলাদা আচরণ করবে?
না, এটি নিয়মিত আচরণ হওয়া উচিত। ksh
,, dash
এবং csh
- সমস্ত cd
বা এর সাথে একই আচরণ করে cd ~
।
কেন প্রথমে ~ যুক্ত হয়েছিল?
টিলড সম্পর্কিত লিঙ্কযুক্ত উত্তরে বর্ণিত সুবিধার্থে এবং historicতিহাসিক কারণগুলি বলব। অবশেষে, এটি কেবল বাড়ির ডিরেক্টরি সম্প্রসারণের চেয়ে আরও বেশি সম্পাদন করে।
তথাপি আপনি উপরের অথবা নীচের কয়েকটি ফোল্ডারের স্তর আছে কিনা $HOME
, কমান্ড cd
এবং cd ~
একই জিনিস করে এবং ভিন্ন করবেন না - এটি আপনাকে ফেরত আপনার হোম ডিরেক্টরিতে পাঠাবে।
হাওভার: আপনি যখন হোমের উপরে 1 বা ততোধিক ফোল্ডারের স্তর হন এবং আপনি নীচে একটি উপ-ডিরেক্টরি 1 বা আরও ফোল্ডার স্তরে সরাসরি যেতে চান $HOME
, তখন টিল্ড ( ~
) আপনাকে কী-স্ট্রোকগুলি সংরক্ষণ করে কাজে আসে যখন রেফারেন্সের জন্য প্রয়োজনীয় পাঠ্যটি ব্যবহার করার জন্য ব্যবহৃত হয় কমান্ড $HOME
টাইপ করার সময় cd
। এই ক্ষেত্রে;
/$ cd # (or cd ~)
~$ pwd
/home/foo
~$ dir
bar bar2 bar3
~$ cd ..
/$ cd ..
/$ pwd
/
/$ cd /bar3
bash: cd: /bar3: no such file or directory
/$ cd ~/bar3 # (instead of "cd /home/foo/bar3")
~/bar3$ pwd
/home/foo/bar3
/ / home / ব্যবহারকারীর অবস্থানের জন্য দাঁড়িয়েছে, তাই টাইপ করার সময় আপনি কিছুটা সময় সাশ্রয় করেন। উদাহরণস্বরূপ সিডি / হোম / ইউজার নেম / ডাউনলোডগুলি সিডি ~ / ডাউনলোডের মতো তবে টাইপিং কম। উভয় কমান্ড একই কাজ করে, কার্য ডিরেক্টরিকে সেই জায়গায় পরিবর্তন করুন।
root
হোম ডাইরেক্টরিটি সাধারণত বাইরে থাকে/home
cd ~
বনামcd $HOME
বনাম সম্পর্কে জিজ্ঞাসা করছেcd ~not-tandu
।cd
বনাম সম্পর্কে এই প্রশ্নটি জিজ্ঞাসা করছেcd ~
।