LINUX.ORG.RU

[Perl][скрипт] не chmod'ит

 


0

1

Написал вчера за 5 минут вот такой скрипт:

#!/usr/bin/perl
die "Не указаны разрешения" if ( ! ($permissions = @ARGV[0]) );
while ( $line = <STDIN> ) {
  printf('Установка разрешений %s файлу: %s', $permissions, $line);
  chmod($permissions, "$line") or die "Не могу установить разрешения";
};
exit 0;
По сути, его нужно юзать как-то так:
[nexfwall@LenovoS10-20027 ~]$ find . -type f | ./chmod-stdin.pl 0664
Но по каким-то не понятным мне причинам, chmod() выходит все время с ошибкой, и скрипт «погибает»
Установка разрешений 0664 файлу: ./evil-agent-smith1.jpg
Не могу установить разрешения at ./chmod-stdin.pl line 6, <STDIN> line 1.
Т.к. время было позднее, забил и пошел спать. Но проблема осталась.
В перлдоке, не нашел объяснений, по каким причинам функция может выходить с ошибкой, и как
Объясните мне, что я делаю не так?

----------------------------------------------------------
Решено. Окончательный вариант:
#!/usr/bin/perl
die "Не указаны разрешения" if ( ! ($permissions = @ARGV[0]) );
while ( <STDIN> ) {
  chomp;
  printf("Установка разрешений %s файлу: %s\n", $permissions, "$_");
  chmod(oct($permissions), "$_") or die "Не могу установить разрешения: $_ $!";
};
exit 0;

★★★★

Последнее исправление: nexfwall (всего исправлений: 8)

or die «Не могу установить разрешения: $_ $@»;

Гипотеза: $permissions является строкой, а не числом. Попробуйте oct($permissions) вместо $permissions.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Не хочет

[nexfwall@LenovoS10-20027 ~]$ find . -type f | ./chmod-stdin.pl 0664
Установка разрешений 0664 файлу: ./evil-agent-smith1.jpg
Не могу установить разрешения:   at ./chmod-stdin.pl line 5, <STDIN> line 1.
[nexfwall@LenovoS10-20027 ~]$ cat chmod-stdin.pl
#!/usr/bin/perl
die "Не указаны разрешения" if ( ! ($permissions = @ARGV[0]) );
while ( $line = <STDIN> ) {
  printf('Установка разрешений %s файлу: %s', $permissions, $line);
  chmod(oct($permissions), "$line") or die "Не могу установить разрешения: $_ $@";
};
exit 0;

nexfwall ★★★★
() автор топика
Ответ на: комментарий от AITap

О, а вот теперь другой разговор:

[nexfwall@LenovoS10-20027 ~]$ find . -type f | ./chmod-stdin.pl 0664
Установка разрешений 0664 файлу: ./evil-agent-smith1.jpg
Не могу установить разрешения: ./evil-agent-smith1.jpg
 Нет такого файла или каталога at ./chmod-stdin.pl line 5, <STDIN> line 1.
[nexfwall@LenovoS10-20027 ~]$ cat chmod-stdin.pl
#!/usr/bin/perl
die "Не указаны разрешения" if ( ! ($permissions = @ARGV[0]) );
while ( <STDIN> ) {
  printf('Установка разрешений %s файлу: %s', $permissions, "$_");
  chmod(oct($permissions), "$_") or die "Не могу установить разрешения: $_ $!";
};
exit 0;
[nexfwall@LenovoS10-20027 ~]$ ll
итого 2915344
-rwxr-xr-x. 1 nexfwall owner        327 Янв 24 13:05 chmod-stdin.pl
...
-rw-rw-r--. 1 nexfwall owner      29330 Янв 17 23:59 evil-agent-smith1.jpg
...

nexfwall ★★★★
() автор топика
Ответ на: комментарий от sdio

Спасибо! Понял, в чем проблема была :)

nexfwall ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.