इसके बजाय टिप्पणी पर रखने के ...
complete -f -X '!*.@(zip|udp)' unzip
के लिए पूर्णता जोड़ना चाहिए
-f -X '!*.@(zip|udp)'
| | | |||________|
| | | || |
| | | || +- filterpat: zip or udp
| | | |+------------- @ : Matches one of the given patterns
| | | +-------------- *. : Anything+<dot>
| | +---------------- ! : Negate
| +------------------- -X : Filter out matches in "filterpat"
+---------------------- -f : files
दूसरे शब्दों में: फाइलें पूरी करें और सभी को समाप्त न करें .zip
या में समाप्त न करें .udp
।
अतिरिक्त
यदि आप -o default
पूर्णता जोड़ते हैं तो सभी फाइलों और निर्देशिकाओं को पूरा / मैच करेगा यदि कोई फाइल समाप्त नहीं हो रही है .zip
या नहीं .udp
।
आप जोड़ देते हैं तो -o plusdirs
पूरा होने के किसी भी निर्देशिका जोड़ देगा अलावा फ़ाइलों के अंत में से किसी मैच के लिए .zip
या .udp
।
वर्तमान
जब आप उपयोग करते हैं complete -p unzip
तो आपको वर्तमान पैटर्न मिलता है।
आपकी टिप्पणियों से ऐसा लगता है जैसे आप +
या तो या @
पैटर्न में गायब हैं , जैसे कि:
# Err:
complete -f -X '!*.(zip|udp)' unzip
|
+---- Missing + or @
जिसका अर्थ होगा किसी भी फाइल का शाब्दिक रूप से समाप्त होना.(zip|udp)
। उदाहरण के लिए
touch 'file_test.(zip|udp)'
मैनुअल के इस भाग पर भी एक नज़र:
यह संभव है उदाहरण के extglob
लिए सक्षम नहीं है। इसके द्वारा सक्षम करें:
shopt -s extglob
shopt
दर्ज करके सभी सेटिंग्स की वर्तमान स्थिति की जाँच करें :
shopt
समारोह
यदि ऐसा है -F something
तो इसका मतलब यह है कि यह किसी फ़ंक्शन का उपयोग करता है जो पूर्णता की सूची उत्पन्न करने के लिए कुछ नाम देता है ।
_filedir_xspec
आम तौर पर एक डेबियन कार्य है। आपके पास ऐसा कुछ हो सकता है:
$ cat /etc/bash_completion
. /usr/share/bash-completion/bash_completion
जिसका अर्थ /usr/share/bash-completion/bash_completion
है खट्टा हो जाना। यहां आपको प्रश्न में फ़ंक्शन मिलेगा । नीचे कुछ पंक्तियाँ आपको दिखती हैं कि यह फ़ंक्शन / पूर्णता _install_xspec
जैसे नाम के एक फ़ंक्शन द्वारा जोड़ी गई है :
_install_xspec '!*.@(zip|[ejsw]ar|exe|pk3|wsz|zargo|xpi|s[tx][cdiw]|sx[gm]|o[dt][tspgfc]|od[bm]|oxt|epub|apk|do[ct][xm]|p[op]t[mx]|xl[st][xm])' unzip zipinfo
मैनुअल प्रविष्टियाँ:
टिप्पणियों के लिए अद्यतन 1:
- अमान्य अभिलेखों या फ़ाइल अनुमतियों के कारण कोई मिलान नहीं।
यह परिणाम को प्रभावित नहीं करना चाहिए। complete
केवल नियमों द्वारा दी गई फाइलों से मेल खाता है और फाइलों की कोई प्रोसेसिंग नहीं करता है। यदि आप उन्हें सूचीबद्ध कर सकते हैं ls
, तो उन्हें मेल खाना चाहिए।
एक साइड नोट के रूप में एक पूर्ण फ़ंक्शन का उपयोग करके ऐसी कार्यक्षमता जोड़ सकता है :
function _unzip_validated() {
# 1. Generate list of files ending in e.g. .zip and .udp
# 2. Validate each file and remove invalid ones from file list.
}
complete -F _unzip_validated unzip
- रंग की। ls
भेद क्यों करता test.zip
है test.upd
?
यह प्रभावित नहीं करता है complete
। द्वारा रंग ls
प्रदान किए जाते हैं $LS_COLORS
। प्रयत्न:
echo "$LS_COLORS" | tr : '\n' | sort
आपको कुछ ऐसा देखना चाहिए *.zip=01;31
जिसका अर्थ है:
*.zip=01;31
|____| | |
| | +--- Red
| +------ Bold
+---------- Files with .zip extension
*.udp
दूसरी ओर इसके साथ कोई प्रविष्टि नहीं जुड़ी है, इसलिए कोई रंग नहीं है।
अगला चरण (पहले होना चाहिए)
- टर्मिनल खोलें और परीक्षण फ़ाइलों के साथ एक निर्देशिका पर जाएं। .Zip और .udp दोनों
- दर्ज
bash --norc
- दर्ज
complete -f -X '!*.@(zip|udp)' unzip
- दर्ज
shopt -s extglob
- दर्ज
unzip <tab><tab>
परिणाम?
इसके अलावा, अपने प्रश्न के नीचे संपादित करें पर क्लिक करें और इसका आउटपुट जोड़ें:
bind -V
shopt
env
मददगार हो सकता है।
complete -p unzip
पैदावारcomplete -f -X '!*.@(zip|udp)' unzip
, औरunzip <tab>
नामित फ़ाइल को पूरा करता हैtest.zip
। हालाँकि, डायरेक्टरी में एक फ़ाइल होती है जिसका नामtest.upd
टैब नहीं होता हैunzip
। फ़ाइल अनुमतियों के तथ्य या फ़ाइल की शून्य लंबाई शायद इस अजीब व्यवहार की व्याख्या करें?