На самом деле, это работает для меня в 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)
завершается неудачно, и вся строка заканчивается.