'সিডি' এবং 'সিডি ~' এর মধ্যে পার্থক্য


10

আমি ভাবছি, সিডি একা যদি আমাকে আমার বাড়ির ফোল্ডারে প্রেরণ করে এবং সিডিও একই কাজ করে, তবে ~ প্রথমে কেন যুক্ত হয়েছিল?

এটি কি বেসের সাথে নির্দিষ্ট কিছু বা অন্য শেলের সাথে তারা আলাদা আচরণ করবে?


2
অবশ্যই একটি সদৃশ নয়। প্রশ্নটি cd ~বনাম cd $HOMEবনাম সম্পর্কে জিজ্ঞাসা করছে cd ~not-tanducdবনাম সম্পর্কে এই প্রশ্নটি জিজ্ঞাসা করছে cd ~

উত্তর:


17

এটি কেবল ~তার চেয়ে বেশি ব্যবহার করা যেতে পারে। যে কোনও কমান্ড হোম ফোল্ডারে শর্টকাট পেয়ে লাভ করতে পারে। সুতরাং আপনি নিজের বাড়িতে সিডি করতে চাইলে এটি প্রয়োজনীয় নয় তবে কী হবে ~/.config?

$ cd ~/.config

অন্যথায় আপনাকে ঘরের পথটি লিখতে হবে, $HOMEভ্যার ব্যবহার করতে হবে , বা দুটি ব্যবহার করতে হবে cd। ফাইলগুলি অনুলিপি বা সরানোর জন্য:

$ cp ~/downloads/some-file some/path/

আপনার বেশিরভাগ ফাইল বাড়িতে থাকায় একটি শর্টকাট থাকা সর্বদা ভাল।


হাই অহিলসেন্ড, আসলে আমার প্রশ্নটি কেন 2 উপায়ের দিকে আরও ওরিয়েন্টেড। আমি ইতিমধ্যে OME হোম ভেরিয়েবলটি ব্যবহার করার বিষয়ে জানি তবে এই বিষয়টি মনে রেখেই কেন "সিডি" আমাকে কেন বাড়িতে প্রেরণ করে? একই উদ্দেশ্যে 2 টি উপায় কেন?
লুইস আলভারাডো

4
@ সাইরেক্স আমার ধারণা আপনার হোম ডিরেক্টরিতে যেতে চান এমন সাধারণ ক্ষেত্রে টাইপিং সংরক্ষণ করা।
একটি সিভিএন

1
অন্যান্য ব্যবহার ~করতে হয় cd ~user/downloadএকটি ব্যবহারকারীর ডাউনলোড ডিরেক্টরি যান।
অট--

5

করণটি 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 এ টার্মিনালে টিল্ড চরিত্র একই চাবি ভাগ করে নিয়েছিল। বিপরীতে হ'ল পরিবেশের পরিবর্তনশীল যা খাঁটি প্রতীকী অর্থ এবং শারীরিক উপস্থাপনা ছিল না।HOMEHOME

এছাড়াও, 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তিহাসিক কারণগুলি বলব। অবশেষে, এটি কেবল বাড়ির ডিরেক্টরি সম্প্রসারণের চেয়ে আরও বেশি সম্পাদন করে।


0

তথাপি আপনি উপরের অথবা নীচের কয়েকটি ফোল্ডারের স্তর আছে কিনা $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

0

/ / home / ব্যবহারকারীর অবস্থানের জন্য দাঁড়িয়েছে, তাই টাইপ করার সময় আপনি কিছুটা সময় সাশ্রয় করেন। উদাহরণস্বরূপ সিডি / হোম / ইউজার নেম / ডাউনলোডগুলি সিডি ~ / ডাউনলোডের মতো তবে টাইপিং কম। উভয় কমান্ড একই কাজ করে, কার্য ডিরেক্টরিকে সেই জায়গায় পরিবর্তন করুন।


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