कैसे बैश पथ पूरा करने के लिए sudo के साथ काम करता है?


11

टैब पाथ पूरा होने से काम नहीं होता (कम से कम उबंटू और एएफएआई आर्क पर)

sudo mount <whatever>

जिस आइसो फाइल को मैं माउंट करने की कोशिश कर रहा हूं वह अंदर नहीं है /etc/fstab। अगर मैं सिर्फ टाइप करता हूँ

mount <whatever>

पूर्ण कार्य (लेकिन निश्चित रूप से कमांड विफल रहता है क्योंकि मैं जड़ नहीं हूं)। जाहिरा तौर पर यह है sudoकि इसे तोड़ता है।

सुडो के साथ काम पूरा कैसे कर सकते हैं?

यह आश्चर्यजनक है कि

sudo umount <whatever>

काम पूरा करता है। इसे कैसे प्राप्त किया जाता है? क्या यह दिखता है /etc/fstab?

समाधान: मैंने अभी एक शेल स्क्रिप्ट को /usr/local/binउस कॉल में डाल दिया है sudo mount ...जिसके पास दिए गए तर्क हैं। इस स्क्रिप्ट को कॉल करते समय पूर्णता काम करती है क्योंकि कोई sudoरास्ता नहीं है।

जवाबों:


11

ऐसा करने के लिए बिल्कुल नहीं है bash, लेकिन यह पैकेज में प्रोग्राम किए गए पूर्णताओं पर निर्भर करता है bash-completion

फ़ाइल में कुछ टिप्पणियों से /etc/bash_completion.d/mount:

# mount(8) completion. This will pull a list of possible mounts out of
# /etc/{,v}fstab, unless the word being completed contains a ':', which
# would indicate the specification of an NFS server. In that case, we
# query the server for a list of all available exports and complete on
# that instead.
#

# umount(8) completion. This relies on the mount point being the third
# space-delimited field in the output of mount(8)
#

इसके अलावा, आप मुख्य फाइल /etc/bash_completionमें निम्नलिखित टिप्पणी पाते हैं , जो स्पष्ट रूप से mountऔर umountआदेशों के बारे में बात करते हैं :

# A meta-command completion function for commands like sudo(8), which need to
# first complete on a command, then complete according to that command's own
# completion definition - currently not quite foolproof (e.g. mount and umount
# don't work properly), but still quite useful.
#

अद्यतन :
के बारे में टिप्पणी mountऔर umountआदेशों हटा दिया गया था से bash_completion में प्रतिबद्ध :

_command_offset: Restore compopts used by called command.

This fixes completions that rely on their compopts, most notably
mount(8).
Fixes bash-completion bug #313183.

में जारी किया गयाbash-completion 1.90


4

इसे आर्क विकी में देख कर आसानी से हल किया जा सकता है :

आपके द्वारा कुछ कमांड टाइप करने के बाद ऑटो-कम्प्लीट फ़ीचर (कीबोर्ड पर टैब कुंजी को दो बार दबाना) करना उपयोगी है sudo

ऐसा करने के लिए, इस प्रारूप में अपनी ~/.bashrcफ़ाइल में लाइन जोड़ें :

पूरा -cf your_command

उदाहरण के लिए, के बाद ऑटो-पूरा करने के लिए sudoऔर man:

complete -cf sudo
complete -cf man

धन्यवाद। कृपया ध्यान दें कि ऑटो-कम्प्लीट काम के मामले में आश्चर्यजनक रूप से अच्छा है sudo umount। जैसा कि enzotib बताता है, यह फीचर टूट गया है mountऔर पिछली बार जब मैंने जाँच की थी, तो यह Arch पर भी टूट गया था।
अली

मैंने अभी आर्क और सूडो माउंट पर यह कोशिश की थी / मुझे <TAB> उसी पथ पर पूरा करता है जिसे मैंने कॉन्फ़िगर किया /etc/fstabहै / मीडिया के साथ शुरू होता है।
विलांड

मेरे मामले में, मैं जिस फाइल को माउंट करने की कोशिश कर रहा हूं वह अंदर नहीं है /etc/fstab। क्या आप इसे देख सकते हैं?
अली

0

नहीं, यह fstab में नहीं दिखता है। बैश पूरा होने के मार्ग में आज्ञाएँ दिखती हैं, बाशिश में उपनाम और / या bash_profile और पथ। इसलिए यदि आप कुछ ऐसा टाइप करते हैं तो sudo mount /mnt/some_folderयह ऑटो-पूर्ण होना चाहिए। हो सकता है कि जब आपने किया था तो umountआप अपने गंतव्य के लिए एक रिश्तेदार रास्ते में थे और यह एक ऑटो-पूर्ण किया था।


धन्यवाद। मुझे यकीन है कि ऑटो-पूर्ण sudo mount /mnt/some_folder100% सुनिश्चित करने के लिए काम नहीं करता है। AFAIK यह आर्क लिनक्स पर भी काम नहीं करता है। जब मैंने किया umountमैं गंतव्य के लिए रिश्तेदार पथ में नहीं था।
अली

-1

मुझे लगता है कि बैश बहुत जटिल नहीं है और पोर्टेबल रहना चाहते हैं, इसलिए वे माउंट ऑपरेशन के लिए प्रस्ताव पूरा करने के लिए / देव में नहीं देखेंगे।

हालाँकि, जब umount को कॉल किया जाता है, तो यह आसानी से df / Mount / etc के आउटपुट को देख सकता है ताकि यह पता चल सके कि कौन से डिवाइस माउंट किए गए हैं और कहाँ हैं।

शायद zsh माउंट के लिए पूरा करने प्रदान करेगा, एक कमांड आदेश करते हुए भी zsh स्वतः पूर्ण हो जाएगा ...


जिस फाइल को मैं माउंट करने की कोशिश कर रहा हूं वह मेरे होम डायरेक्टरी में एक आईएसओ फाइल है। काम पूरा नहीं होता है। ओह, मैं भूल गया हूं, अगर मैं सुडो का उपयोग नहीं करता हूं तो माउंट काम के साथ पूरा कर रहा हूं। इसे तोड़ने वाला सूडो है। कोई विचार?
अली

निरपेक्ष रास्तों का उपयोग करते हुए भी? / होम / उपयोगकर्ता / myiso <TAB> -> myisofile.iso सूडो गूंज $ शेल के साथ डीबग करें; sudo pwd, उम्मीद है कि यह आपको कुछ जानकारी देगा।
अकी

हाँ, निरपेक्ष रास्तों से। मैं आपके द्वारा सुझाए गए डिबगिंग का प्रयास करूंगा। आपके द्वारा सुझाई गई डिबगिंग /bin/bash /home/aliअपेक्षा के अनुरूप है।
अली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.