Bash 와일드카드 구성

Bash 와일드카드 구성

cygwin에서 돌아와 보니 Ubuntu 10.4에서 bash(버전 4.1.5)를 사용하는 것에 대해 매우 혼란스럽습니다. 나는 두 가지 가능성 중 하나를 좋아합니다.

  • 다른 모든 것을 무시 .하고 ..일치시킵니다.
  • 명시적으로 지정하지 않는 한 점으로 시작하는 파일 이름을 무시합니다.

현재 동작이 이상합니다.

cd; ls .*

점으로 시작하는 파일 이름을 명시적으로 요청했는데도 "ls: can access .*: No such file or Directory"라고 표시됩니다.

cd; ls .gnupg/*.gpg

또한 점으로 시작하지 않는 파일을 요청한다고 불평합니다(단지 점으로 시작하는 디렉토리 이름일 뿐입니다).

산출shopt -p

(삭제됨)

해결책

이 문제가 발생하지 않은 다른 사용자의 값으로 값을 변경했지만 shopt도움이 되지 않았습니다. 그런 다음 내 것을 둘로 나누고 .bashrc다음과 같은 내용이 포함된 문제 있는 줄을 찾는 아이디어를 생각해 냈습니다 GLOBIGNORE='.[!/.]*:..[!/]*:*/.[!/.]*:*/..[!/]*:.

나는 이것을 이것으로 대체했고 GLOBIGNORE='.:..'그것은 내가 원하는 것과 거의 작동합니다.

답변1

불행히도 나는 내 자신의 질문에 답해야 합니다. 그것은 GLOBIGNORE. 매뉴얼 페이지에서:

경로 이름 확장 시 무시할 파일 이름 집합을 정의하는 콜론으로 구분된 패턴 목록입니다. 경로 이름 확장 패턴과 일치하는 파일 이름이 GLOBIGNORE의 패턴 중 하나와도 일치하는 경우 일치 목록에서 제거됩니다.

답변2

"ls: 액세스할 수 없습니다.*: 해당 파일이나 디렉터리가 없습니다." 오류는 현재 디렉터리에 권한 문제가 있는 것처럼 들립니다. 다음을 사용하여 재현할 수 있습니다.

$ mkdir -p ~/tmp/tmp
$ cd ~/tmp/tmp
$ ls .*
.:

..:
tmp
$ chmod u-r .
$ ls .*
ls: cannot access .*: No such file or directory
$ ls -ldn .
d-wxr-xr-x 2 1000 1000 4096 2012-03-12 18:31 .
$ chmod u+r .
$ ls .*
.:

..:
tmp

chmod +r .달리고 다시 시도하는 것이 좋습니다 ls .*.

답변3

파일과 일치하는 glob이 없을 가능성이 높습니다. 일치하는 파일이 없으면 bash기본값은 *문자 그대로 해석하는 것입니다. 이를 방지하기 위해 nullglobusing을 설정할 수도 있습니다 shopt -s nullglob(그러나 일치하는 파일이 없으면 명령에 매개변수가 완전히 없게 됩니다).

관련 정보