以下简单的 Perl 脚本将列出目录的内容,并将目录列为脚本的参数。如何在 Linux 系统上捕获权限被拒绝的错误?目前,如果此脚本在用户没有读取权限的目录上运行,则终端不会发生任何事情。
#!/bin/env perl
use strict;
use warnings;
sub print_dir {
foreach ( glob "@_/*" )
{print "$_\n"};
}
print_dir @ARGV
最佳答案
glob
函数没有太多的错误控制,除了在最后一个 glob 失败时设置 $!
:
glob "A/*"; # No read permission for A => "Permission denied"
print "Error globbing A: $!\n" if ($!);
如果 glob 稍后成功找到某些东西,$!
将不会被设置。例如 glob "*/*"
即使无法列出目录的内容也不会报告错误。
标准File::Glob
中的bsd_glob
函数模块允许设置一个标志以启用可靠的错误报告:
use File::Glob qw(bsd_glob);
bsd_glob("*/*", File::Glob::GLOB_ERR);
print "Error globbing: $!\n" if (File::Glob::GLOB_ERROR);
关于linux - 如何捕获 glob 运算符(operator)的权限被拒绝错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216885/