कार्य यूनिक्स निर्देशिका के अंदर टिल्ड (~)


22

इसलिए, Im एक UNIX वातावरण में काम कर रहा है और मैंने देखा कि मेरी कार्यशील निर्देशिका के अंदर, जो मेरे UNIX घर से मील दूर है, वहाँ एक है ~

अब, एक बार अतीत में, मैंने rm -rf ~अपनी वर्किंग डायरेक्टरी से किया और अपने होम डाइरेक्टरी को पूरी तरह से खत्म कर दिया और इसमें आईटी को शामिल करना पड़ा।

मैं इसे दोबारा नहीं करना चाहता। उसी समय, मैं जानना चाहता हूं

  1. ~मेरी कार्यशील निर्देशिका में क्यों बनाया गया है? बचत करते समय क्या यह दोषपूर्ण उंगली है ( :w!लेकिन क्या होता है :w~? !!)

  2. जांच करने से पहले, एक स्क्रिप्ट है जो अतिरिक्त फ़ाइलों या फ़ोल्डरों की तलाश में है जो कि पी 4 के बारे में पता नहीं है, इसलिए इसे ~एक समस्या का कारण हो सकता है। तो मैं ~अपनी कार्यशील निर्देशिका से कैसे निकाल सकता हूं और उसी समय अपने घर को नहीं मिटाऊंगा?

मेरे पास एक बैकअप कमांड है जिसे delमैं इसके बजाय उपयोग करता हूं rm -rf। यह सिर्फ एक अस्थायी स्थान पर सामान रखता है। मैं इसका इस्तेमाल कर सकता हूं और छुटकारा पा सकता हूं ~। लेकिन मुझे यह जानने में अधिक दिलचस्पी है कि ऐसा क्यों होता है, और मैं इसे कैसे निकाल सकता हूं?


आमतौर पर, शेल आपके होम डायरेक्टरी के साथ एक पथ की शुरुआत में ~ की जगह लेता है। /home/yourUserName/~निर्देशिका को एक्सेस करने के लिए पूर्ण पथ का उपयोग करें ~
जोफेल

और ~ otheruser / file का उपयोग अन्य उपयोगकर्ता के घर निर्देशिकाओं को पूर्णता के लिए संदर्भित करने के लिए किया जा सकता है।
गॉडलीजेक

एक शरारत की तरह लग रहा है!
Xolve

जवाबों:


36

या तो यह बोली:

rm -i '~'
rm -i "~"
rm -i \~

या इसे एक मार्ग से संदर्भित करें, बजाय केवल एक बेसनेम के:

rm -i ./~
rm -i /path/to/~

ध्यान दें, एक मजाकिया दिखने वाले एकल चरित्र नाम के बावजूद, यह वैचारिक रूप से अलग नहीं है अगर आपने एक फ़ाइल बनाई है जिसका नाम SOME$PATHक्या है

touch 'SOME$PATH'

और ऐसा करके इसे हटाने की कोशिश की:

rm -i SOME$PATH

( चेतावनी: चर SOME$PATH को यहां उदाहरण के लिए उद्धृत नहीं किया गया है। आम तौर पर इसे उद्धरणों में संलग्न किया जाएगा 'SOME$PATH' )

दोनों मामलों में, शेल आपके द्वारा दिए गए नाम का विस्तार कर रहा है, और आपको इसे रोकने की आवश्यकता है।

इसके अलावा: rm -rfएक फ़ाइल को निकालने के लिए उपयोग न करें ! के लिए पूरी उद्देश्य rm -rबताने के लिए है rmनिकालें निर्देशिका के लिए यह ठीक है। यदि आप फ़ाइलों को हटाने की कोशिश करते समय गलती से पूरी निर्देशिकाओं को हटाना नहीं चाहते हैं, तो आदतन पास न करें -r!


12
मैंने अभी-अभी इसका परीक्षण किया है। :w~in vim नामक एक फाइल बनाई ~rm ~लौट आया cannot remove /home/seth it is a directoryफ़ाइल कोrm "~" हटा दिया । बस रेखांकित करने के लिए स्वचालित रूप से पास नहीं है-rf
सेठ

4
डिफ़ॉल्ट रूप से हिंसक विकल्पों को छोड़ने की सिफारिश करने के लिए +1। यह kill -9डिफ़ॉल्ट रूप से करने के लिए समान है , जिसे मैंने देखा है।
सेलडा

मैं देख रहा हूं कि उदाहरण rm -i $FOOजानबूझकर उदाहरण के लिए चर को उद्धृत नहीं करता है, लेकिन फिर भी: एक शेल उदाहरण को शामिल करना rmऔर तर्क के रूप में एक अयोग्य चर दिखाना बहुत बुरा है , उह, क्षमा करें, संदर्भ से स्वतंत्र। मुझे यकीन है कि यह भी लम्बा हो सकता है :) मैं कुछ नोट जोड़ूंगा - लेकिन शायद आप उदाहरण बदल सकते हैं, थोड़ा?
वोल्कर सिएगल

@VolkerSiegel, प्वाइंट लिया - मैंने आपके संपादन का हिस्सा लिया, लेकिन फुटनोट थोड़ा भारी लग रहा था। मैंने समस्याओं का कारण बनने के लिए भी एक चर नाम पर स्विच किया - ज्यादातर लोगों के पास SOME/bin:/usr/binअपने फाइल सिस्टम पर कहीं भी एक फ़ाइल नहीं है । :)
Godlygeek

हाँ, अच्छा लग रहा है! (मैं लगभग जवाब देने जा रहा था: क्या? भारी-भरकम-हाथ! क्या आपने कभी अपने लाइव में एक वास्तविक उद्धरण समस्या का अनुभव किया है?) गलत शेल उदाहरणों की मात्रा के बारे में कुछ हद तक स्पष्ट है, सामान्य तौर पर ... अरे, यह कठिन है गलत उदाहरणों के बिना भी समझने के लिए! )
वोल्कर सेगल

1

टिल्ड जब अकेले उपयोग के संदर्भ में ls ~आपके घर की सूची को ~ के रूप में सूचीबद्ध करेगा , तो यह आपके घर के लिए एक शॉर्टकट है। यदि आपने किया है ls ~brownतो आप भूरे रंग के घर की सामग्री को सूचीबद्ध करेंगे।

VIM, जब तक अन्यथा नहीं बताया गया है, एक बदली हुई फाइल की बैक-अप कॉपी बनाएगा: myFile myFile ~।

यह व्यवहार अच्छा है क्योंकि यह एक बैक-अप बनाता है, लेकिन यदि आप इसे नहीं चाहते हैं, तो आप को जोड़ें ।vimrc फ़ाइल: कोई बैकअप सेट न करें (जिसे मैं अभी एक्सेस करता हूं vi ~/.vimrc)।

और निश्चित रूप से अन्य लोगों ने कहा, अगर आपके पास ~ नामक एक फ़ाइल है, तो बस चार ~ \ _ के रूप में बच जाएं

me 217 % vi this      (saved as :w~)
me 218 % ls
this  ~
me 219 % cat \~
kfdkdfk
me 220 % \rm \~
me 221 % ls
this

0

इसका असर मिस्टीज पर हो सकता है। यदि आपका TERM=xtermकॉन्फिगरेशन मेरा जैसा कुछ भी है, तो व्यावहारिक रूप से आपके कीबोर्ड की हर फंक्शन की जैसे एस्केप सीक्वेंस भेजेगा ...

infocmp -1 | grep -n \~ | tail -n3
138:    kich1=\E[2~,
141:    knp=\E[6~,
142:    kpp=\E[5~,

आधे से अधिक आउटपुट infocmp -1में ~टिल्ड मेरी मशीन पर बच जाता है - और मुझे यह समझने में नुकसान होता है कि उनमें से अधिकांश क्या करते हैं। मुझे पता है कि zshकम से कम वास्तव में ज्यादातर मामलों में स्ट्रिंग के बच गए हिस्से को खा जाता है - और केवल ~टिल्ड छोड़ देता है ।

उदाहरण के लिए, टाइपिंग echoतो <space>तब F6और <return>प्रिंट ...

/home/mikeserv

भेजा गया वास्तविक भागने का क्रम है ...

kf6=\E[17~

दिलचस्प बात यह है कि इनमें से अन्य एस्केप सीक्वेंस हैं जिनमें >पात्र हैं।

infocmp -1 | grep \>
is2=\E[!p\E[?3;4l\E[4l\E>,
rmkx=\E[?1l\E>,
rs2=\E[!p\E[?3;4l\E[4l\E>,

उन का उपयोग आमतौर पर बच जाता है - रीसेट और इनिशियलाइज़ेशन स्ट्रिंग्स। यह कल्पना करना मुश्किल नहीं है कि एक गिरा हुआ कीबोर्ड या किसी प्रकार का बटन-स्मैश जब एक इंटरेक्टिव शेल की प्रतीक्षा कर ~रहा है, तो आपके फाइल-सिस्टम में बेतरतीब ढंग से छंटनी की गई फ़ाइलों का परिणाम हो सकता है। कम से कम, यह कभी-कभार मेरी फसल उगाता है।

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