Unix:为什么我的错误没有触发?

时间:2010-12-13 05:56:34

标签: bash unix

在文件列表中, 更新,文件列表是一个文件

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

该文件没有读取权限-w------,但是,目录有700,但我正在尝试读取该文件。

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

它没有触发!我不明白为什么,我的唯一猜测是:测试命令是从另一个进程开始的。如果是这样,那是什么解决方法?

3 个答案:

答案 0 :(得分:0)

实际上,它适用于bash:

while read line; do [ ! -r "$line" ] && echo "no file" ; done
如果文件存在且可读,则

将文件名作为输出,如果不存在,则为“no file”。

你在使用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

你永远不会得到你的错误信息,因为在看起来甚至开始之前,shell检测到它无法读取文件。 open(2)调用失败,整行结束。

答案 1 :(得分: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

通过此,您可以看到文件测试为“可读”,即使文件没有设置读取权限。

答案 2 :(得分: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

这部分内容对你不起作用或不按预期工作?