_expand ทำอะไร


12

ผมทำงานกับเปลือกและโดยไม่ได้ตั้งใจฉันเติมข้อความอัตโนมัติด้วยtabหลังจากที่เขียนซึ่งมีผลใน_e_expand

คำสั่งนี้ทำอะไร ฉันไม่สามารถหาคำอธิบายออนไลน์การอ้างอิงเดียวที่ฉันสามารถหาได้ที่นี่ใน Ask Ubuntu คือ:

แต่พวกเขาไม่ตอบคำถามของฉัน แต่พวกเขาเปิดขึ้นคำถามเพิ่มเติมของชนิดเดียวกันเกี่ยวกับคำสั่งเช่น_complete, _complete_as_rootฯลฯ

คำตอบ:


14

คุณสามารถค้นหาสิ่งที่_expandจะทำเมื่อพิมพ์

$ type _expand
_expand is a function
_expand ()
{
    if [[ "$cur" == \~*/* ]]; then
        eval cur=$cur;
    else
        if [[ "$cur" == \~* ]]; then
            cur=${cur#\~};
            COMPREPLY=($( compgen -P '~' -u "$cur" ));
            [ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]};
            return ${#COMPREPLY[@]};
        fi;
    fi
}

นี่คือฟังก์ชั่นในกลไกการเสร็จสิ้นการทุบตี มันจะขยายตัวหนอน ( ~) ในชื่อพา ธ ใน/etc/bash_completionความคิดเห็นเกี่ยวกับฟังก์ชั่น:

# Expand ~username type directory specifications.  We want to expand
# ~foo/... to /home/foo/... to avoid problems when $cur starting with
# a tilde is fed to commands and ending up quoted instead of expanded.

ลองใช้งานในเทอร์มินัลพิมพ์:

~<tab><tab>

มันจะขยายไปยังชื่อผู้ใช้ตัวอย่างเช่น

~usera     ~userb     ~userc

1
typeขอบคุณฉันไม่ทราบคำสั่ง ไม่ชัดเจนสำหรับฉันว่าทำไมฉันจึงไม่สามารถเรียกใช้ฟังก์ชันเหล่านี้_function_name [argument]ได้ แต่ตอนนี้ฉันเข้าใจว่าพวกเขาให้บริการวัตถุประสงค์ของพวกเขาเป็นส่วนขยายการเติมข้อความอัตโนมัติและความจริงที่ว่าพวกเขาปรากฏในการเติมข้อความอัตโนมัติของฉันนั้น ถูกเรียกโดยตรง)
scristalli

3
ว่า_expandฟังก์ชั่นการทำงานที่สมบูรณ์แบบอื่น ๆ ทั้งหมดเพียงปรุงแต่งCOMPREPLYอาร์เรย์ขึ้นอยู่กับค่าของ$curที่มีรูปแบบการดำเนินการเสร็จสมบูรณ์
ความโกลาหล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.