저는 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
다음과 같은링크존재하다@camillemachorowski제안한 대로 다음 명령을 통해 패키지를 설치했습니다.
yum --enablerepo=epel install bash-completion-extras
그것은 내 문제를 해결했습니다. 다들 감사 해요!