
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