2010-12-13 35 views
0

在文件列表中, 更新,文件列表是一個文件Unix:爲什麼我的錯誤沒有觸發?

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

文件沒有讀取權限-w------,但是,目錄中有700,但我試圖讀取文件。

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嗎?

更新:

等待,你只是想讀內容的文件的

然後

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

更新2:

好了,你有什麼樣

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

,做

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

一第二應該得到

-bash: noreadme: Permission denied 

你不會把你的錯誤消息,因爲雖然前甚至開始,外殼檢測到它無法讀取該文件。呼叫open(2)失敗,整個行結束。

+0

這實際上是一個文件,我的錯誤。我應該說該文件包含多行。 – Strawberry 2010-12-13 06:08:35

+0

如果不是將它當作日誌來對待,而是在原地編輯你的答案來說出你想要的內容,那麼你的答案會更易於閱讀。 – camh 2010-12-13 21:47:51

0

爲什麼你的錯誤不會觸發的一個可能的解釋是,如果你是以root身份運行。你將有權對文件中讀取文件而不管權限:

# 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

這回答這個問題怎麼樣? – 2010-12-13 15:20:00

+0

@Charlie Martin:標題中的問題是「爲什麼我的錯誤沒有觸發?」我回答說,如果你是根,那麼你將擁有權限,即使它看起來不像。因此錯誤不會觸發。我怎樣才能讓這個更清晰? – camh 2010-12-13 21:12:29

0

測試命令沒有在子shell中運行,並且會產生即使它可以看到的輸出。這並不完全清楚你在做什麼。我相信你正在做的這兩種情況之一:

$ 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 

哪一部分,這是不是爲你工作或無法按預期工作?

相關問題