कहो बैश निम्नलिखित उर्फ साथ कॉन्फ़िगर किया गया है:बैश पूरा होने: उर्फ पूरा होने में ऑनर भंडार विशेष Git उर्फ
alias up="git --git-dir /path/to/backup/.git"
और उस विशेष भंडार - और केवल कि भंडार - निम्नलिखित Git उपनाम है:
[alias]
backup = commit --allow-empty-message
up
ऑटो-पूर्ण backup
कैसे हो सकता है?
यह स्वत: पूर्ण करता backup
नहीं बल्कि up
:
cd /a/different/dir
git --git-dir=/path/to/backup/.git ba
यह मानक Git आदेशों के साथ स्वत: पूर्ण करता up
नहीं बल्कि backup
:
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main up
संपादित: Etan सही है, पूरा होने के समारोह का विस्तार उर्फ देखना पसंद करते हैं, तो मैं निम्नलिखित बना लिया है:
CompletableAlias() {
if (($#<2)); then
return 1
fi
source_c="$1"
target_c="$2"
target_a=("${@:2}")
target_s="${target_a[*]}"
alias "${source_c}=${target_s}"
completion_modifier="__${source_c}_completion"
completion_original="$(complete -p "$target_c" 2>/dev/null |
sed 's/.*-F\W\+\(\w\+\).*/\1/'
)"
if [[ -n "$completion_original" ]]; then
read -r -d '' completion_function <<-EOF
function $completion_modifier() {
COMP_LINE="\${COMP_LINE/#${source_c}/${target_s}}"
((COMP_POINT+=${#target_s}-${#source_c}))
((COMP_CWORD+=${#target_a[@]}-1))
COMP_WORDS=(${target_a[@]} \${COMP_WORDS[@]:1})
$completion_original
}
EOF
eval "$completion_function"
completion_command="$(complete -p "$target_c" |
sed "s/${completion_original}/${completion_modifier}/;
s/\w\+\$/${source_c}/"
)"
$completion_command
fi
}
source "/usr/share/bash-completion/completions/git"
CompletableAlias "up" "git" "--git-dir" "/path/to/backup/.git"
लेकिन वहाँ भरी समस्याओं:
up bac<Tab>
काम नहीं करता है
up <Tab>
डिफ़ॉल्ट पूरा होने का उपयोग करता है और Git subcommands की सूची नहीं है- और कई और अधिक ...
संपादित 2: स्क्रिप्ट अपडेट किया गया Re: Bash completion of aliased commands पर ऊपर उल्लिखित समस्याओं सुझावों का उपयोग करके ठीक करने के लिए। जाहिर है यह एक बहुत ही आम काम है। लेकिन अब मैं यह त्रुटि संदेश में चल रहा हूँ:
$ cd /a/different/dir
$ up backup<Tab> fatal: Not a git repository (or any of the parent directories): .git
क्या पूरा करने का कार्य 'ऊपर' या विस्तारित उपनाम देखता है? –
यदि पूरा कार्य कमांड में 'अप' के रूप में पढ़ता है तो यह अपेक्षित व्यवहार नहीं करेगा, 'बैकअप' में विस्तार करने के लिए एक द्वितीयक फ़ंक्शन का उपयोग करें ताकि आप सुनिश्चित हो सकें कि पूर्ण आदेश पूर्ण करने के कार्य को भेजा जा रहा है। इस तरह यह कई पूर्ण कार्यों के साथ है, वे उम्मीद करते हैं (या मानते हैं) कि आदेश वह है जिसे उन्होंने * प्रोग्राम किया था। इसलिए, यदि आप जाते हैं और किसी अन्य कमांड के लिए एक पूरक संलग्न करते हैं, तो यह काम नहीं करेगा (इसलिए मध्य-व्यक्ति कार्य)। शुरू करने के लिए आप दो को कॉल करने से -xv से कुछ आउटपुट दिखा सकते हैं, यह सुनिश्चित करने के लिए कि आपका फ़ंक्शन वह कर रहा है जो आप उम्मीद करते हैं (या इसके अंतर) – osirisgothra