ฉันจำไม่ได้ว่าฉันได้สคริปต์นี้มาจากไหน แต่ของฉัน .bashrc
มีบรรทัดต่อไปนี้:
# ตั้งค่าการเติมข้อความอัตโนมัติสำหรับนามแฝง git
ถ้า [ -f "/usr/share/bash-completion/completions/git" ]; แล้ว
ที่มา /usr/share/bash-completion/completions/git
__git_complete gc _git_checkout
__git_complete gp _git_pull
อื่น
echo "เกิดข้อผิดพลาดในการโหลด git ที่เสร็จสมบูรณ์"
ไฟ
git_branch() {
git สาขา 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
ก
และ จีพี
เป็นนามแฝงสำหรับ คอมไพล์ชำระเงิน
และ คอมไพล์ดึง
ตามลำดับ
ฉันมี /usr/share/bash-completion-completions/git
ดังนั้นเมื่อฉัน ที่มา ~/.bashrc
ไม่มีอะไรสะท้อนไปยังบรรทัดคำสั่ง
ก่อนที่จะอัปเกรดเป็น 21.10 (21.04, 20.04 และ 18.04 ทำงานได้ดี) ฉันสามารถ gc feat<tab><tab>
และรับรายชื่อสาขาที่ขึ้นต้นด้วย ความสำเร็จ
แต่ตอนนี้ฉันได้รับข้อผิดพลาดแปลก ๆ หลังจากแต่ละครั้ง <tab>
:
$ gc featbash: [: -lt: ตัวดำเนินการ unary คาดหวัง // แท็บแรกหลังจาก 'gc feat'
ทุบตี: [: : ต้องการนิพจน์จำนวนเต็ม
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
ure/bash: [: -lt: ตัวดำเนินการ unary คาดหวัง // แท็บที่สองหลังจาก 'ure/' (สิ่งนี้ส่งคืนโดยแท็บแรก)
ทุบตี: [: : ต้องการนิพจน์จำนวนเต็ม
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
ทุบตี: [: -lt: ตัวดำเนินการ unary คาดหวัง // แท็บที่สามหลังจากบรรทัดนี้
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
ทุบตี: [: : ต้องการนิพจน์จำนวนเต็ม
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
แสดงความเป็นไปได้ทั้งหมด 136 รายการ? (y หรือ n)
มีความคิดว่าอะไรเป็นสาเหตุของสิ่งนี้
อัปเดต 1:
ฉันได้รับข้อผิดพลาดนี้เมื่อใช้นามแฝง - เสร็จสิ้นโดยใช้คำสั่งแบบเต็ม git checkout feat<tab>
ทำงานได้ดี เมื่อฉัน เป็นกลุ่ม ~/.bash_aliases
มันแจ้งให้ฉันกู้คืนเวอร์ชันก่อนหน้าและลบไฟล์ swap ฉันทำสิ่งนี้และทุกอย่างดูดี แต่ฉันยังคงได้รับข้อผิดพลาด
อัปเดต 2:
พยายามอัปเกรด จากนั้นลบ/ติดตั้งใหม่ คอมไพล์
และ ทุบตีเสร็จสิ้น
ไม่มีประโยชน์
bash-completion เป็นเวอร์ชันใหม่ล่าสุดแล้ว (1:2.11-2ubuntu1)
git เป็นเวอร์ชันใหม่ล่าสุดแล้ว (1:2.32.0-1ubuntu1)
อัปเดต 3:
ไม่ ตั้ง -xv
เพื่อเปิดใช้งาน verbose/debug ด้านล่างนี้ไม่ใช่การถ่ายโอนข้อมูลทั้งหมด แต่รวมถึงส่วนที่สร้างข้อความ:
$ gc feat+ __git_func_wrap _git_checkout
+ คำ cur ท้องถิ่น cword ก่อนหน้า
+ _get_comp_words_by_ref -n =: cur คำ cword ก่อนหน้า
+ ค่าสถานะไม่รวมในเครื่อง i OPTIND=1
+ คำ =()
+ คำศัพท์ภาษาท้องถิ่น
+ อัปปาร์กส์=()
+ อัปวาร์=()
+ upargs ท้องถิ่น upvars vcur vcword vprev vwords
+ getopts c:i:n:p:w: flag -n =: cur คำ cword ก่อนหน้า
+ กรณี $flag ใน
+ ไม่รวม==:
+ getopts c:i:n:p:w: flag -n =: cur คำ cword ก่อนหน้า
+ [[ 6 -ge 3 ]]
+ กรณี ${!OPTIND} ใน
+ vcur = เคอร์
+ (( เลือก += 1 ))
+ [[ 6 -ge 4 ]]
+ กรณี ${!OPTIND} ใน
+ vwords = คำ
+ (( เลือก += 1 ))
+ [[ 6 -ge 5 ]]
+ กรณี ${!OPTIND} ใน
+ vcword = ดาบ
+ (( เลือก += 1 ))
+ [[ 6 -ge 6 ]]
+ กรณี ${!OPTIND} ใน
+ vprev = ก่อนหน้า
+ (( เลือก += 1 ))
+ [[ 6 -ge 7 ]]
+ __get_cword_at_cursor_by_ref =: คำ cword cur
+ คำ =()
+ คำศัพท์ท้องถิ่น
+ __reassemble_comp_words_by_ref =: คำ cword
+ local ไม่รวม i j line ref
+ [[ -n =: ]]
+ ไม่รวม='[=:]'
+ printf -v cword %s 1
+ [[ -v ไม่รวม ]]
+line='gc feat'
+ (( i = 0, j = 0 ))
+ (( ฉัน < 2 ))
+ [[ 0 -gt 0 ]]
+ ref='คำ[0]'
+ printf -v 'words[0]' %s gc
+ บรรทัด = 'ความสามารถ'
+ (( ฉัน == COMP_CWORD ))
+ (( i++, j++ ))
+ (( ฉัน < 2 ))
+ [[ 1 -gt 0 ]]
+ [[ ความสามารถ == +([=:]) ]]
+ ref='คำ[1]'
+ printf -v 'words[1]' %s สำเร็จ
+ เส้น=
+ (( ฉัน == COMP_CWORD ))
+ printf -v cword %s 1
+ (( i++, j++ ))
+ (( ฉัน < 2 ))
+ (( ฉัน == COMP_CWORD ))
+ local i cur= index=7 'lead=gc feat'
+ [[ 7 -gt 0 ]]
+ [[ -n gc feat ]]
+ [[ -n gcfeat ]]
+ cur='gc feat'
+ (( ฉัน = 0 ))
+ (( i <= ดาบ ))
+ [[ 7 -ge 2 ]]
+ [[ gc != \g\c ]]
+ (( ฉัน < ดาบ ))
+ old_size ท้องถิ่น = 7
+ cur=' ความสำเร็จ'
+ ท้องถิ่น new_size=5
+ (( ดัชนี -= old_size - new_size ))
+ (( ++i ))
+ (( i <= ดาบ ))
+ [[ 5 -ge 4 ]]
+ [[ เฟอา != \f\e\a\t ]]
+ เคอร์ = ความสำเร็จ
+ (( ดัชนี > 0 ))
+ (( ดัชนี-- ))
+ [[ 4 -ge 4 ]]
+ [[ ความสามารถ != \f\e\a\t ]]
+ (( ฉัน < ดาบ ))
+ (( ++i ))
+ (( i <= ดาบ ))
+ [[ -n เพลง ]]
+ [[ ! -n ความสามารถ ]]
+ (( ดัชนี < 0 ))
+ คำท้องถิ่น cword cur
+ _upvars -a2 คำ gc feat -v cword 1 -v cur feat
+ (( 10 ))
+ (( 10 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n 2 ]]
+ พิมพ์f %d 2
+ [[ -n คำ ]]
+ unset -v คำ
+ eval 'คำ=("${@:3:2}")'
คำ=("${@:3:2}")
++ คำ=("${@:3:2}")
+กะ4
+ (( 6 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n ดาบ ]]
+ unset -v คำสั่ง
+ eval 'cword="$3"'
คำใบ้ = "$3"
++ ดาบ = 1
+กะ3
+ (( 3 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n เคอร์ ]]
+ unset -v cur
+ eval 'cur="$3"'
เคอร์="$3"
++ เคอร์ = เพลง
+กะ3
+ (( 0 ))
+ [[ -v vcur ]]
+ upvars+=("$vcur")
+ upargs+=(-v $vcur "$cur")
+ [[ -v vcword ]]
+ upvars+=("$vcword")
+ upargs+=(-v $vcword "$cword")
+ [[ -v vprev ]]
+ [[ 1 -ge 1 ]]
+ upvars+=("$vprev")
+ upargs+=(-v $vprev "${words[cword - 1]}")
+ [[ -v vwords ]]
+ upvars+=("$vwords")
+ upargs+=(-a${#words[@]} $vwords ${words+"${words[@]}"})
+ (( 4 ))
+ คำก่อนหน้าของ cur cword ท้องถิ่น
+ _upvars -v cur feat -v cword 1 -v prev gc -a2 คำ gc feat
+ (( 13 ))
+ (( 13 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n เคอร์ ]]
+ unset -v cur
+ eval 'cur="$3"'
เคอร์="$3"
++ เคอร์ = เพลง
+กะ3
+ (( 10 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n ดาบ ]]
+ unset -v คำสั่ง
+ eval 'cword="$3"'
คำใบ้ = "$3"
++ ดาบ = 1
+กะ3
+ (( 7 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n ก่อนหน้า ]]
+ unset -v ก่อนหน้า
+ eval 'prev="$3"'
ก่อนหน้า = "$3"
++ ก่อนหน้า = gc
+กะ3
+ (( 4 ))
+ ตลับเงิน 1 เหรียญค่ะ
+ [[ -n 2 ]]
+ พิมพ์f %d 2
+ [[ -n คำ ]]
+ unset -v คำ
+ eval 'คำ=("${@:3:2}")'
คำ=("${@:3:2}")
++ คำ=("${@:3:2}")
+กะ4
+ (( 0 ))
+ _git_checkout
+ __git_has_doubledash
+ ท้องถิ่น c=1
+ '[' 1 -lt 1 ']'
+ กลับ 1
++ __git_checkout_default_dwim_mode
++ local last_option dwim_opt=--dwim
++ '[' '' = 1 ']'
+++ __git_find_on_cmdline --no-ติดตาม
+++ คำท้องถิ่น c= show_idx
+++ ทดสอบ 1 -gt 1
+++ รายการคำในเครื่อง =--ไม่ติดตาม
+++ '[' -lt 1 ']'
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
++ '[' -n'' ']'
+++ __git config --type=bool checkout.guess
+++ git config --type=bool checkout.guess
++ '[' '' = เท็จ ']'
+++ __git_find_last_on_cmdline '--guess --no-guess'
+++ คำท้องถิ่น c=1 show_idx
+++ ทดสอบ 1 -gt 1
+++ ท้องถิ่น 'wordlist = --guess --no-guess'
+++ '[' 1 -gt '' ']'
ทุบตี: [: : ต้องการนิพจน์จำนวนเต็ม
++ last_option=
++ กรณี "$last_option" ใน
++ เสียงก้อง --dwim
+ ท้องถิ่น dwim_opt=--dwim
+ กรณี "$prev" ใน
+ กรณี "$cur" ใน
++ __git_find_on_cmdline '-b -B -d --detach --orphan'
++ คำท้องถิ่น c= show_idx
++ ทดสอบ 1 -gt 1
++ ท้องถิ่น 'รายการคำ = -b -B -d --detach --orphan'
++ '[' -lt 1 ']'
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
+ '[' -n'' ']'
++ __git_find_on_cmdline --ติดตาม
++ คำท้องถิ่น c= show_idx
++ ทดสอบ 1 -gt 1
++ รายการคำศัพท์ท้องถิ่น = --- ติดตาม
++ '[' -lt 1 ']'
bash: [: -lt: คาดว่าจะมีตัวดำเนินการยูนารี
โปรดทราบว่านี่ไม่ใช่การถ่ายโอนข้อมูลทั้งหมด เป็นเพียงบิตสูงสุดและรวมถึงตำแหน่งที่สร้างข้อความแสดงข้อผิดพลาด ฉันพยายามติดตามหนึ่งในข้อความแสดงข้อผิดพลาดย้อนกลับผ่านสคริปต์ และพบข้อความนี้ใน /usr/share/bash-completion/completions/git
:
# ตรวจสอบว่ามีคำใดคำหนึ่งอยู่ในบรรทัดคำสั่งหรือไม่
#และพิมพ์คำแรกที่พบ
#
# การใช้งาน: __git_find_on_cmdline [<ตัวเลือก>]... "<wordlist>"
# --show-idx: เลือกแสดงดัชนีของคำที่พบในอาร์เรย์ $words
__git_find_on_cmdline ()
{
คำท้องถิ่น c="$__git_cmd_idx" show_idx
ขณะทดสอบ $# -gt 1; ทำ
กรณี "$1" ใน
--show-idx) show_idx=y ;;
*) กลับ 1 ;;
เอสแซค
กะ
เสร็จแล้ว
รายการคำศัพท์ท้องถิ่น = "$1"
ในขณะที่ [ $c -lt $cword ]; ทำ
สำหรับคำใน $wordlist; ทำ
ถ้า [ "$word" = "${words[c]}" ]; แล้ว
ถ้า [ -n "${show_idx-}" ]; แล้ว
เสียงสะท้อน "$c $word"
อื่น
เสียงสะท้อน "$คำ"
ไฟ
กลับ
ไฟ
เสร็จแล้ว
((ค++))
เสร็จแล้ว
}
ดูเหมือนว่าอาจจะเป็นเส้น คำท้องถิ่น c="$__git_cmd_idx" show_idx
คือการตำหนิฉันใด ค
ดูว่างเปล่าไป -ล
การเปรียบเทียบในภายหลังในการทริกเกอร์ตัวดำเนินการ unary ที่คาดไว้
เหตุใดจึงใช้งานไม่ได้อีกต่อไปหลังจากอัปเดต