OS X पर ~ का अप्रत्याशित बैश पूरा होना


13

मैंने ~TabTabबैश कमांड प्रॉम्प्ट पर दबाया और पूर्णता का अप्रत्याशित सेट मिला।

पहले यह /Usersनिर्देशिका के सभी लोगों की तरह दिखता था , और बहुत कुछ।

तब मुझे लगा कि यह "होम" निर्देशिका वाले लोगों की रिवर्स लुकिंग कर रहा है /etc/password, या शायद जो थे /var/empty- यह सही के बारे में लगता है।

मैं इस बारे में उत्सुक हूं कि वास्तव में क्या चल रहा है और यह क्यों काम करता है।

जवाबों:


21

मेरे पास OSX सिस्टम नहीं है, लेकिन सभी * निक्स पर जाँच करने के लिए आसान है, ~fooउपयोगकर्ता की होम डायरेक्टरी के लिए एक शॉर्टहैंड है foo। उदाहरण के लिए, यह कमांड मेरे उपयोगकर्ता में चली जाएगी $HOME( cd ~अकेले ही आपके होम डायरेक्टरी में चली जाएगी):

cd ~terdon

इसलिए, ~और Tabसभी संभावित उपयोगकर्ता नामों का विस्तार करेगा। सूची में उपयोगकर्ताओं की सूची के समान होना चाहिए /etc/passwd

मैं इस बात की पुष्टि कर सकता हूं कि जब मैं अपने डेबियन पर यह कोशिश करता हूं तो वास्तव में ऐसा ही होता है।


यह वही है जब मैं FreeBSD पर इसे आज़माता हूं।
जेनी डी

तो मुझे जो चीज फेंकनी पड़ी वह यह थी कि मेरे पास उन उपयोगकर्ताओं के लिए निर्देशिका / घर नहीं था। वास्तव में, कई ने कहा / var / खाली। मुझे लगा कि इस तरह की पूर्णता डिस्क लुकअप द्वारा होती है, ताकि ~ डिस्क आदि पर वास्तविक होम डाइरेक्टरी को देखने के बजाय / etc / passwd प्रविष्टियों को देखेगा। क्योंकि ~ वास्तव में "एक उपयोगकर्ता के घर निर्देशिका" का अर्थ है और वास्तव में / ओएस (मेरे / उपयोगकर्ता) के लिए एक शॉर्टकट, विस्तार / संदर्भ / var / खाली नहीं है। कुछ नया सीखा! धन्यवाद!
वॉल्ट स्टोनबर्नर

नीचे दिए गए @altStoneburner fdo के सुझाव से पता चलता है कि OSX कुछ अलग कर रहा है, मुझे नहीं पता। लिनक्स पर, वैसे भी, एक निर्देशिका /homeबनाना अप्रासंगिक है, जो एक नया उपयोगकर्ता नाम सूचीबद्ध नहीं करेगा। इसके अलावा, ध्यान दें कि सभी उपयोगकर्ता के $ HOMEs /home(या /Users) में नहीं हैं।
terdon

@terdon - मुझे लगता है कि आपने अपने उत्तर के साथ इसे पसंद किया है। मेरे लिनक्स खाते पर मेरे पास एक ऐसा उपयोक्ता है जिसके पास / noxistent की फर्जी निर्देशिका है, यह स्वतः पूर्णता में दिखाता है, लेकिन cd कमांड विफल रहता है (जैसा कि अपेक्षित है)।
वॉल्ट स्टोनबर्नर

2

मुझे लगा कि यह लोगों के "घर" निर्देशिकाओं / पासवर्ड / पासवर्ड के साथ रिवर्स लुकअप कर रहा है।

ओएस एक्स ओपन निर्देशिका पर / etc / passwd के बजाय परामर्श किया जाता है।


1

बैश संदर्भ मैनुअल कहता है :

बैश पाठ को उपयोगकर्ता नाम के रूप में पूरा करने का प्रयास करता है (यदि पाठ '~' से शुरू होता है)

बैश पूरा होने के लिए फ़ंक्शन का उपयोग करता है getpwent

man getpwent OSX पर कहते हैं:

ये फ़ंक्शन opendirectoryd (8) से जानकारी प्राप्त करते हैं, जिसमें /etc/master.passwd में रिकॉर्ड शामिल हैं, जो मास्टर.पासवर्ड (5) में वर्णित है।

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