私は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
それは私の問題を解決しました。みんなありがとうございます!