2010-12-13 7 views
0

는 업데이트, 파일 목록 파일이 -w------은, 그러나, 디렉토리가 700가 더 읽기 권한이 없습니다Unix : 왜 내 오류가 발생하지 않습니까? 파일 목록에서

hello/noReadPermissions1.txt 
hello/noReadPermissions2.txt 
hello/noReadPermissions3.txt 

파일을,하지만 난 파일을 읽을하려합니다.

while read line; do 
[ ! -r "$line" ] && echo "Cannot Read this" 
done < filelist 

트리거가 아닙니다. 나는 왜, 내 추측과 유일한 추측을 이해하지 못한다 : 테스트 명령이 다른 프로세스에서 시작하고있다. 그렇다면 해결 방법은 무엇입니까?

답변

0

사실, bash는 나를 위해 작동 : 파일이 아니라면 "어떤 파일을"존재하지 읽을 수 있으며, 경우

while read line; do [ ! -r "$line" ] && echo "no file" ; done 

나에게 출력으로 파일 이름을 제공합니다.

bash를 사용하고 있습니까?

는 업데이트 :

기다립니다, 당신은 단지 파일의을 내용을 읽을려고? 당신이

$ while read line; do [ ! -r "$line" ] && echo "no line" ; done < noreadme 

$ touch noreadme 
$ chmod a-r noreadme 
$ ls -l noreadme 
--w------- 1 chasrmartin staff 0 Dec 12 23:16 noreadme 

같은 것을 가지고 할 수 있도록

좋아, :

다음

if [ -r $filelist ] 
then 
    while read line 
    do 
    # something with line 
    done < $filelist 
fi 

업데이트 2 nd가 나타납니다.

-bash: noreadme: Permission denied 

심지어보기가 시작되기 전에 쉘이 파일을 읽을 수 없기 때문에 오류 메시지가 표시되지 않습니다. open(2) 호출이 실패하고 전체 회선이 종료됩니다.

+0

사실 파일이었습니다. 실수였습니다. 파일에 여러 줄이 있다고 말해야합니다. – Strawberry

+0

로그처럼 취급하지 않고 원하는 답변을 편집하면 응답을 읽기가 쉬울 것입니다. – camh

0

루트로 실행중인 경우 오류가 발생하지 않는 이유에 대한 가능한 설명은 다음과 같습니다. 당신은 파일에 관계없이 권한의 파일을 읽을 수있는 권한이 것이에서

# touch /tmp/foo 
# chmod 200 /tmp/foo 
# ls -l /tmp/foo 
--w------- 1 root root 0 Dec 13 21:03 /tmp/foo 
# test -r foo && echo readable 
readable 

을, 당신이 볼 수있는 파일로 설정되어있는 읽기 권한이없는 경우에도 "읽기"로 파일을 테스트합니다.

+0

이 질문에 어떻게 대답합니까? –

+0

@Charlie Martin : 제목의 질문은 "왜 내 오류가 발생하지 않습니까?"입니다. 나는 당신이 루트라면 그 것처럼 보이지 않더라도 권한을 가질 것이라고 대답했다. 따라서 오류가 발생하지 않습니다. 어떻게하면 더 명확하게 할 수 있습니까? – camh

0

테스트 명령이 서브 셸에서 실행되지 않고 있어도 출력이 표시됩니다. 당신이하는 일이 완전히 명확하지 않습니다. 이 두 가지 중 하나를 수행하고 있다고 생각합니다.

$ mkdir /tmp/readtest 
$ cd /tmp/readtest 
$ touch noReadPermission{1,2,3}.txt 
$ chmod 200 noReadPermission{1,2,3}.txt 
$ ls noReadPermission* > filelist 
$ ls -l 
-rw------- 1 user group 78 Dec 13 11:57 filelist 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions1.txt 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions2.txt 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions3.txt 
$ while read line; do [ ! -r "$line" ] && echo "Cannot Read $line"; done < filelist 
Cannot Read noReadPermissions1.txt 
Cannot Read noReadPermissions2.txt 
Cannot Read noReadPermissions3.txt 
$ chmod a-r filelist 
$ ls -l 
--w------- 1 user group 78 Dec 13 11:57 filelist 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions1.txt 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions2.txt 
--w------- 1 user group 0 Dec 13 11:57 noReadPermissions3.txt 
$ while read line; do [ ! -r "$line" ] && echo "Cannot Read $line"; done < filelist 
-bash: filelist: Permission denied 

이 중 어떤 부분이 예상대로 작동하지 않습니까?

관련 문제