Score:3

Bash เสร็จสิ้นสำหรับ git branch ที่ใช้งานไม่ได้หลังจากอัปเกรดเป็น 21.10

ธง nl

ฉันจำไม่ได้ว่าฉันได้สคริปต์นี้มาจากไหน แต่ของฉัน .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 ที่คาดไว้

เหตุใดจึงใช้งานไม่ได้อีกต่อไปหลังจากอัปเดต

Score:4
ธง cn

สิ่งนี้ถูกโพสต์เป็นข้อผิดพลาด GitHub ของ bash ที่เสร็จสมบูรณ์. ปัญหาได้รับการแก้ไขใน กิท 2.33.0.

จนกว่าการแก้ไขนี้จะไหลลงสู่ที่เก็บ Ubuntu คุณสามารถแก้ไขปัญหาได้ ดังนี้:

ในไฟล์ /usr/share/bash-completion/completions/git, เปลี่ยน

__git_func_wrap ()
{
    คำเคอร์ท้องถิ่น cword prev

เข้าไปข้างใน

__git_func_wrap ()
{
    คำ cur ท้องถิ่น cword ก่อนหน้า __git_cmd_idx=1

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา