Bashでオートコンプリートで独自のサブフォルダにCDを挿入するには?

Bashでオートコンプリートで独自のサブフォルダにCDを挿入するには?

私はCentos 7とbashを使っています。一部のコンピューターでは、現在のフォルダーにサブフォルダー (および一部のファイル) しかない場合、cd <tab>入力するとサブフォルダー名が自動補完されることがわかります。ただし、マイコンピュータでは<tab>他のオートコンプリート機能を実行できますが、マイコンピュータでは機能しません。たとえば、less ab<tab>で始まるファイル名は自動補完されますab。どうすれば解決できますか?

編集する:

別の作業機械には同じCentosとbashがあります。マイコンピュータではcd <tab>ビープ音だけが鳴ります。の場合、cd <tab><tab>現在のフォルダ内のすべてのファイルと個々のサブフォルダが表示されます。個々のフォルダは両方のシステムで正確です(コマンドにls -ld the_single_folder表示されますdrwxrwxr-x 2 user user ...)。

一部のシェルオプション(コマンド出力shopt)が異なります。出力は次diff shoptA shoptBのとおりです(マイコンピュータはBです)。

18c18
< extglob           on
---
> extglob           off
27c27
< hostcomplete      off
---
> hostcomplete      on
42a43
> syslog_history    off

shopt -s extglob私はコマンドを使用し、私のコンピュータ(extglobとhostcomplete)でこれらのさまざまなオプションを変更してみましたshopt -u hostcomplete。しかし成功はありません。

コマンドはcomplete -p cdそのコンピュータから出力され、マイcomplete -o nospace -F _cd cdコンピュータからも出力されます-bash: complete: cd: no completion specification

type _cdこのマシンのコマンド出力は次のとおりです。

_cd is a function
_cd () 
{ 
    local cur prev words cword;
    _init_completion || return;
    local IFS='
' i j k;
    compopt -o filenames;
    if [[ -z "${CDPATH:-}" || "$cur" == ?(.)?(.)/* ]]; then
        _filedir -d;
        return 0;
    fi;
    local -r mark_dirs=$(_rl_enabled mark-directories && echo y);
    local -r mark_symdirs=$(_rl_enabled mark-symlinked-directories && echo y);
    for i in ${CDPATH//:/'
'};
    do
        k="${#COMPREPLY[@]}";
        for j in $( compgen -d $i/$cur );
        do
            if [[ ( -n $mark_symdirs && -h $j || -n $mark_dirs && ! -h $j ) && ! -d ${j#$i/} ]]; then
                j+="/";
            fi;
            COMPREPLY[k++]=${j#$i/};
        done;
    done;
    _filedir -d;
    if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
        i=${COMPREPLY[0]};
        if [[ "$i" == "$cur" && $i != "*/" ]]; then
            COMPREPLY[0]="${i}/";
        fi;
    fi;
    return 0
}

ベストアンサー1

次のようなリンク存在するツイートをサイトに埋め込む提案したように、次のコマンドでパッケージをインストールしました。

yum --enablerepo=epel install bash-completion-extras

それは私の問題を解決しました。みんなありがとうございます!

おすすめ記事