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
기본값은 *
문자 그대로 해석하는 것입니다. 이를 방지하기 위해 nullglob
using을 설정할 수도 있습니다 shopt -s nullglob
(그러나 일치하는 파일이 없으면 명령에 매개변수가 완전히 없게 됩니다).