मैं ~~एक अलग निर्देशिका को इंगित करना चाहता हूं ताकि मैं इसे शॉर्टकट के रूप में उपयोग कर सकूं। मैं चाहता हूं कि इसमें ठीक वैसा ही कार्य हो ~। मैं यह कैसे कर सकता हूँ?
मैं ~~एक अलग निर्देशिका को इंगित करना चाहता हूं ताकि मैं इसे शॉर्टकट के रूप में उपयोग कर सकूं। मैं चाहता हूं कि इसमें ठीक वैसा ही कार्य हो ~। मैं यह कैसे कर सकता हूँ?
जवाबों:
वास्तव में, एक रास्ता है, यह एक शानदार तरीका नहीं है, लेकिन यह एक तरीका है, हाहा!
अपनी /etc/passwdफ़ाइल में निम्न जोड़ें :
~:x:1111:99:special Character user:/test:/sbin/nologin
1111UID को उस चीज़ के साथ बदलें जो कुछ समझ में आता है, /testउस निर्देशिका से बदलें जिसे आप चाहते हैं ~ ~ की नकल करें।
99मेरे सिस्टम पर वह nobodyसमूह है जिसकी मैं अनुशंसा करता हूं यदि आप यह सुनिश्चित करने के लिए ऐसा करते हैं कि यह किसी भी फाइल पर NO अनुमतियों वाला एक समूह है जो कभी भी उपयोग किया जाएगा। सैद्धांतिक /sbin/nologinरूप से शेल के रूप में, इसका उपयोग करने में सक्षम नहीं होना चाहिए, इसमें /etc/shadowप्रविष्टि भी नहीं होगी, इसलिए इसमें पासवर्ड नहीं होगा। सैद्धांतिक रूप से ठीक होना चाहिए, लेकिन सुनिश्चित करें कि यह किसी भी तरह से आपको खाते के रूप में लॉग इन नहीं करने देता है।
एक साइड नोट के रूप में: मैं किसी भी तरह से यह नहीं कह रहा हूं कि यह एक अच्छा विचार है, लेकिन यह उस कार्यक्षमता को पूरा करेगा जो आप चाहते हैं।
संपादित करें: पूर्णता 'खातिर इस VarunAgw द्वारा सुझाव दिया गया था: आप के साथ सामान्य रूप में उपयोगकर्ता जोड़ सकता है useradd -s /sbin/nologin -N tmpऔर उसके बाद संशोधित /etc/passwdऔर /etc/shadowउपयोगकर्ता को बदलने के लिए tmpकरने के लिए ~और का स्थान बदलने केhome directory
useradd 'tmp'और उसके बाद की जगह tmpके साथ~
shadowप्रविष्टि के साथ वैध बनाने के बारे में कैसा महसूस करता हूं, लेकिन मुझे लगता है कि जब तक कोई पासवर्ड सेट नहीं होता है तब तक यह वास्तव में एक अतिरिक्त जोखिम नहीं है।
आप CDPATH का उपयोग कर सकते हैं और ~~ अपनी CDPATH घटकों में से एक में शाब्दिक रूप से नामित निर्देशिका रख सकते हैं ।
से man bash(लेकिन CDPATH में भी उपलब्ध है sh)
सीडी कमांड के लिए खोज पथ। यह निर्देशिकाओं की एक बृहदान्त्र-अलग-अलग सूची है जिसमें शेल सीडी कमांड द्वारा निर्दिष्ट गंतव्य निर्देशिकाओं के लिए दिखता है। एक नमूना मूल्य "है ।: ~: / usr"।
जो आपको करने की अनुमति देगा cd ~~।
यदि आप vi ~~/someFileनिर्देशिका ट्री में कहीं से भी चीजें करना चाहते हैं , तो आप भाग्य से बाहर हैं यदि आप ~~शाब्दिक रूप से जोर देते हैं जब तक कि आप अपने शेल को हैक नहीं करते हैं, हालांकि, आप अपनी जादुई निर्देशिकाओं को संग्रहीत करने के लिए चर या पर्यावरण चर का उपयोग कर सकते हैं ताकि आप कर सकें। , जैसे,$tilda/someFile
मैं आमतौर पर अपने घर निर्देशिका में शीघ्र ही नामित निर्देशिकाओं के अंदर अक्सर एक्सेस की गई फ़ाइलों को डाल देता हूं ताकि मैं उन्हें इस तरह ~/bया जैसे पथों के साथ एक्सेस कर सकूं ~/l।
स्वाभाविक रूप से, आप आमतौर पर निर्देशिकाओं को सहानुभूति के साथ निर्देशिकाओं में बदल सकते हैं जितना आप चाहते हैं।
शेल का ~टिल्ड विस्तार ज्यादातर प्रोग्रामेबल है। यह या तो अपने अनुगामी संदर्भ में घोषित सिस्टम उपयोगकर्ता नाम की उपयोगकर्ता निर्देशिका में फैलता है (और इन पंक्तियों के साथ एक उत्कृष्ट समाधान पहले से ही पेश किया गया है) , $HOMEशेल चर का मूल्य , या बिल्कुल भी नहीं।
इसलिए:
(HOME=/tmp; cd ~)
pwd; echo "$HOME"
/tmp
/home/mikeserv
मैं $HOMEहर समय बदलता हूं , और मैं इसे रीसेट करने के लिए अपने शेल के पर्यावरण फ़ाइल में एक फ़ंक्शन रखता हूं:
home(){
HOME=~$USER
cd ~; pwd
}
यदि आप ~किसी तरह से टिल्ड का उपयोग करना चाहते हैं जो आपके होम डायरेक्टरी को संदर्भित नहीं करता है, तो ऐसा करें । बस फिर से भरोसा $HOME। इससे डरो मत। $HOMEकिसी भी अन्य की तरह सिर्फ एक शेल चर है।
मेरे पास एक और सुझाव है कि @ PSkocik के उपयोग के बारे में उत्कृष्ट सलाह पर केवल थोड़ा विस्तार है $CDPATH। एक बात जिसका उन्होंने उल्लेख नहीं किया, वह यह है कि आप $CDPATHवर्तमान शेल मूल्य $CDPATHको बिल्कुल भी बदले बिना इनलाइन का उपयोग और परिवर्तन कर सकते हैं । उदाहरण के लिए:
mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2
/tmp/1/2
cdयह आवश्यक रूप से एक शेल बिलिन है, लेकिन यह एक POSIX विशेष शेल बिलिन नहीं है, और इसलिए इसके मूल्य को घोषित करने से $CDPATHइसका शेल शेल मूल्य प्रभावित नहीं होता है। यदि आप इसका उपयोग करते हैं जैसा कि मैंने ऊपर किया $CDPATHहै तो केवल एक cdकमांड के पर्यावरण के लिए बदल दिया गया है , और इसके पिछले मूल्य को इसके बाद से बहाल किया गया है। इतिहास पूरा होने के साथ संयोजन में उपयोग किए जाने पर मुझे उपरोक्त तकनीक सबसे उपयोगी लगती है। मैं उपरोक्त कार्य करूंगा, एक निर्देशिका में बदलूंगा, कुछ कमांड चलाऊंगा, तब तक cdदबाऊंगा जब तक कि मैं अपनी कमांड पर वापस नहीं आता और एक पथ खंड या दो को अन्यत्र स्थानांतरित करने के लिए बैकस्पेस देता हूं ।
अब यदि आप इन दोनों अवधारणाओं को जोड़ते हैं तो आप अगली बार इस्तेमाल किए जाने वाले कमांड का मतलब पूरी तरह से अलग कर सकते हैं जब आप इसे इस्तेमाल करते हैं।
for HOME in /tmp ~
do mkdir -p ~/1/2
CDPATH=~ cd 1/2
done
/tmp/1/2
/home/mikeserv/1/2
पूरी तरह से एक काम करता है के रूप में अच्छी तरह से काम करता है:
$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman
यहाँ एक और दृष्टिकोण है जो थोड़ा करीब आता है (मुझे पता है कि मैं आवश्यकताओं के करीब नहीं जा रहा हूँ)
function ~~ { echo /test; }
फिर कुछ और पात्रों के साथ:
cd `~~`/subdir
vi `~~`/file
cd ~~/foo/barइतनी अच्छी तरह से काम करने के लिए जा नहीं है, या vim ~~/foo.txt, आदि ...
CDPATHको संभालने के लिए चर का उपयोग करूंगा cd।
~। और ~एक कमांड की तरह उपयोग नहीं किया जाता है।
CDPATHयह है कि .... सीडी के बाहर के कमांड के लिए काम नहीं करता है। IE आप cd ~~या कर सकते हैं, cd ~~/testdir1लेकिन आप नहीं कर सकते हैंvim ~~testdir1
alias cd~='HOME=$OTHER_HOME; home(){ cd -- "$1"; HOME=~$USER; unset -f home;}; home '