_Exand làm gì?


12

Tôi đã làm việc với trình bao, và do nhầm lẫn, tôi đã tự động hoàn thành tabsau khi viết _e, kết quả là_expand .

Lệnh này làm gì? Tôi không thể tìm thấy lời giải thích trực tuyến, các tài liệu tham khảo duy nhất tôi có thể tìm thấy ở đây trên Hỏi Ubuntu là:

Nhưng họ không trả lời câu hỏi của tôi. Thay vào đó, họ mở ra nhiều câu hỏi cùng loại về lệnh như _complete, _complete_as_rootvv

Câu trả lời:


14

Bạn có thể tìm hiểu những gì _expand, khi gõ

$ 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
}

Đây là một chức năng trong cơ chế hoàn thành bash. Nó mở rộng dấu ngã ( ~) trong tên đường dẫn. Trong /etc/bash_completionlà một nhận xét về chức năng:

# 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.

Hãy thử nó trong một thiết bị đầu cuối, gõ:

~<tab><tab>

Nó sẽ mở rộng sang tên người dùng, ví dụ

~usera     ~userb     ~userc

1
Cảm ơn, tôi không biết lệnh type. Tôi không rõ tại sao tôi không thể gọi các hàm này là _function_name [argument], nhưng bây giờ tôi hiểu rằng chúng phục vụ mục đích của chúng là các tiện ích mở rộng tự động hoàn thành và thực tế là chúng xuất hiện trong tự động hoàn thành của tôi chỉ đơn giản là vì chúng được khai báo (nhưng chúng không có nghĩa được gọi trực tiếp).
scristalli

3
Chính xác là _expandhàm, như tất cả các hàm hoàn chỉnh khác, chỉ thao tác với COMPREPLYmảng, dựa trên các giá trị $curchứa mẫu hoàn thành.
hỗn loạn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.