2010-12-13 63 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 

哪一部分,这是不是为你工作或无法按预期工作?

相关问题