_Expand ne yapıyor?


12

Kabuk ile çalışıyordum ve yanlışlıkla tabyazdıktan sonra otomatik olarak _etamamladım, sonuçlandı _expand.

Bu komut ne yapar? Çevrimiçi bir açıklama bulamadım, Ask Ubuntu'da burada bulabileceğim tek referanslar:

Ama soruma cevap vermiyorlar. Bunun yerine, gibi komutlar hakkında aynı tür soru daha açmak _complete, _complete_as_rootvb

Yanıtlar:


14

_expandYazarken ne işe yaradığını öğrenebilirsiniz

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

Bu bash tamamlama mekanizmasındaki bir işlevdir. Yol adlarında tildes ( ~) öğesini genişletir . In /etc/bash_completionişlevi hakkında bir açıklama:

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

Bir terminalde deneyin, şunu yazın:

~<tab><tab>

Örneğin, kullanıcı adlarına genişleyecektir

~usera     ~userb     ~userc

1
Teşekkürler, komutu bilmiyordum type. Bu işlevleri neden olarak adlandıramadığım açık değildi _function_name [argument], ama şimdi amaçlarına otomatik tamamlama uzantıları olarak hizmet ettiklerini anlıyorum ve otomatik tamamlamamda göründükleri gerçeği sadece beyan edildikleri için (ama kastedilmiyorlar) doğrudan çağrılabilir).
scristalli

3
Tam olarak _expandişlev, diğer tüm tam işlevler gibi, COMPREPLYdeğerlerini $curtamamlama desenini içeren diziye yönlendirir .
kaos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.