`.hidden` 파일을 분석하여 `ls`에서 해당 내용을 생략합니다.

`.hidden` 파일을 분석하여 `ls`에서 해당 내용을 생략합니다.

ls파일에 나열된 모든 파일 이름을 무시(출력에서 생략) 하고 싶습니다 .hidden.

이 작업을 수행하기 위해 재정의되는 bash 함수를 찾았습니다 ls.

ls () {
  if [ -f .hidden ]; then
    declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
    ls "$@"
  fi
}

...하지만 내가 source .bashrc돌아오면

-bash: .bashrc: line 121: syntax error near unexpected token `('
-bash: .bashrc: line 121: `ls () {'

나는 구문 오류를 스스로 식별할 수 없습니다(나는 약간의 bash 스크립팅을 수행했지만 그 declare GLOBIGNORE줄은 나에게 낯설습니다). 121행은 바로 이렇습니다. ls () {그 자체로는 괜찮은 것 같습니다.

이 함수에 오류가 있습니까?

사용할 수 있는 또 다른 접근 방식이 있습니까?


업데이트:

alias ls='ls --color=auto'from 을 삭제해도 오류가 .bashrc해결되지 않습니다 unexpected token. 조언에 따라 globignore를 사용하는 접근 방식을 포기합시다.

-I@rkhff가 (그리고 ) 를 지적했을 때 --ignore=나는 이와 같은 것을 시도해 볼 생각을했습니다 (bashrc에 배치하기 전에 먼저 함수에서)

PARAM=''
if [ -f .hidden ]; then
  IGN=' -I '
  while read p; do
    $PARAM+=$IGN$p
    #$PARAM="${PARAM}${IGN}${p}"
  done < .hidden
fi
ls$PARAM

그런데 그게 신비롭게도 /home/alec/bin/ls.sh: line 7: +=: command not found.... 왜 +=찾을 수 없나요? 내 웹 검색에서 연산자가 "명령을 찾을 수 없음"이라는 결과를 초래하는 다른 사례를 본 적이 없습니다 +=. 주석 처리된 행에서도 =명령을 찾을 수 없음 오류가 발생합니다. 누군가 이것이 원인이 될 수 있다고 말할 수 있습니까?

답변1

이전 버전이 있기 때문에 오류가 발생했을 가능성이 높습니다.별명ls에 대한 정의 시연하려면:

$ alias foo='echo foobar'
$ foo
foobar
$ foo () { echo barfoo; }
-bash: syntax error near unexpected token `('

하지만, 나는 당신이 원하는 것을 할 수 없을 것이라고 생각합니다 GLOBIGNORE.껍데기glob을 확장하고 쉘은 모든 glob 표현식을 확장합니다.~ 전에명령 ls이 호출됩니다.

최소한 GNU Coreutils 구현을 사용하면 ex를 사용 하거나 스위치를 ls사용할 수 있습니다 .-I--ignore

hidls () 
{ 
    declare -a args;
    local pat;
    local patfile=".hidden";
    [[ -r $patfile ]] || { 
        command ls "$@";
        return
    };
    while IFS= read -r pat; do
        args+=("-I");
        args+=("$pat");
    done < "$patfile";
    command ls "${args[@]}" "$@"
}
alias ls=hidls

관련 정보