Неправильно проверяется наличие файла. Где ошибка?

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Аватара пользователя
accessdenied
Сообщения: 5
Зарегистрирован: 13 ноя 2008, 11:43
Откуда: Россия, Нижний Новгород
Контактная информация:

Нужна помощь.

Есть скрипт, в котором делается следующее:

open(VMS_RUNNING, "vmrun list");
while ( my $vm = <VMS_RUNNING> ) {
chomp($vm);
print "DEBUG: processing $vm\n";
if ( -f $vm) {
print "DEBUG: file exists\n";
}
}

И вот этот кусок ну ни в какую не работает как надо.

vmrun выдает список путей к файлам виртуальных машин, которые запущены в данный момент. chomp отрезает пробелы и перевод строки. А потом вдруг if не срабатывает, будто файла и нет вовсе, хотя в дебаге печатается правильное имя файла.

В то же время небольшой скриптец работает как надо:
my @afile="/path/to/file";
my ($sfile)=@afile;
if ( -f $sfile ) {
print "DEBUG2: file exists\n";
} else {
print "DEBUG2: no such file\n";
}

В этом маленьком скрипте все как надо - если есть файл - назодит, если нет, то не находит, соответственно.

А в первом скрипте что-то странное, будто логика наоборот.
Есть подозрение что упускаю какое-то нужное преобразование, но сам никак не додумаюсь в чем же все-таки дело.

Кто-нибудь с таким сталкивался? Какие есть идеи?
Аватара пользователя
accessdenied
Сообщения: 5
Зарегистрирован: 13 ноя 2008, 11:43
Откуда: Россия, Нижний Новгород
Контактная информация:

Посидел, обнаружил условие, при котором все это происходит.

В первом скрипте нужны рутовые права, поэтому запускается он через sudo.
Второй же я запускал из-под своего логина.

Если и второй запустить через sudo, то возникает та же ошибка - в упор не видит файлов, к которым получает правильные пути.

Что тут может быть такого особенного при запуске через sudo?
К сожалению не могу проверить как работает если из-под рута запустить, потому как пароля нет.
Аватара пользователя
accessdenied
Сообщения: 5
Зарегистрирован: 13 ноя 2008, 11:43
Откуда: Россия, Нижний Новгород
Контактная информация:

Нашлось в чем дело.

В /path/to/file один каталог не читаем для others, а root не входит в ту же группу, что владелец папки, так что не может получить доступа туда.

Всю голову сломал, а такая фигня.
Тема закрыта.
Magistr
Сообщения: 1
Зарегистрирован: 17 фев 2009, 12:57
Контактная информация:

accessdenied писал(а):Нашлось в чем дело.

В /path/to/file один каталог не читаем для others, а root не входит в ту же группу, что владелец папки, так что не может получить доступа туда.

Всю голову сломал, а такая фигня.
Тема закрыта.

ага согласен ...
Ответить