क्या मैं बैश में '~' जैसा एक कस्टम "निर्देशिका उपनाम" बना सकता हूं?


13

बाश में मैं अपने घर निर्देशिका के साथ जा सकते हैं cd ~और वास्तव में किसी भी आदेश के साथ मेरे घर निर्देशिका को देखें ~

क्या मैं अन्य निर्देशिकाओं को संदर्भित करने के लिए नया, कस्टम "निर्देशिका उपनाम" (?) बना सकता हूं? काल्पनिक उदाहरण:

make_alias "~~" /mnt/photon/work/foo_project/

cp ~/home.png ~~/set_8/home_4.png

यह कैसे किया जा सकता है, यदि ऐसा है तो? यदि ऐसा नहीं हो सकता है, तो यह डिजाइन द्वारा और ऐसा क्यों है?

अच्छा लगा: ~इस "~" को कहां और कैसे सेट किया गया है और इसके लिए बाध्य है?


1
विशेष रूप से आपके लिए उपयोगी नहीं है, लेकिन आप ऐसा कर सकते हैं कि वैश्विक उपनामों में .... ZSH, लेकिन BASH नहीं। : अलियास -ग ~~ = '/ mnt / फोटॉन / काम / foo_project /'
१२:०२ पर SuperMagic

1
@SuperMagic: मुझे वैश्विक उपनाम भी पसंद हैं। लेकिन दूसरे उदाहरण में (cp ~~ / set ...) वे असफल हो जाएंगे। नामित निर्देशिकाएं अधिक उपयुक्त हैं: n=/mnt/photon/work/foo_projectऔर फिर cp foo ~n/bar। (ओपी के लिए ध्यान दें: भी zsh तक सीमित)।
MPY

1
@ ऑलिवरसालबर्ग: मुझे नहीं लगता कि यह कोई डुप्लिकेट है। दूसरा प्रश्न एकल चरित्र रीमैपिंग ( @या _) के बारे में पूछता है , जो कि संभव नहीं है, जबकि ~~निश्चित रूप से हैसी (हैकी, लेकिन संभव है)। इसके अलावा, यह जवाब नहीं देता है कि यह रीमैपिंग कैसे की जाती है।
डेनिस

संबंधित सवाल था: superuser.com/questions/541767
n611x007

जवाबों:


25

टिल्ड एक उर्फ ​​नहीं है, यह बैश शेल के विस्तार का हिस्सा है (जैसे *.txtया $((1 + 2)))।

बैश टिल्ड विस्तार निम्नलिखित टिल्ड-उपसर्गों का समर्थन करता है:

~            The value of $HOME

~/foo        $HOME/foo

~fred/foo    The subdirectory foo of the home directory of the user fred

~+/foo       $PWD/foo

~-/foo       ${OLDPWD-'~-'}/foo

~N           The string that would be displayed by `dirs +N'

~+N          The string that would be displayed by `dirs +N'

~-N          The string that would be displayed by `dirs -N'

dirsनिर्देशिका स्टैक का उपयोग करता है। आप pushdइसमें डायरेक्टरी जोड़ने के लिए उपयोग कर सकते हैं ।

के बारे में अपने विशिष्ट प्रश्न का उत्तर देने के लिए ~~, हां, इसके लिए एक निर्देशिका को मैप करना संभव है। बस एक उपयोगकर्ता बनाएं जिसे इसके होम निर्देशिका के रूप में ~सेट /mnt/photon/work/foo_project/किया गया है:

sudo useradd '~'
sudo sed -i 's#:/home/~:[^:]*$#:/mnt/photon/work/foo_project:/bin/false#' /etc/passwd

बेशक, बहुत अधिक "सैनर" दृष्टिकोण केवल एक शेल चर को परिभाषित कर रहा है जो आपकी निर्देशिका में आपके ~/.bashrcकमांड के साथ इंगित करता है

foo=/mnt/photon/work/foo_project

जो $fooहमेशा की तरह पहुँचा जा सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.