linux - 如何捕获 glob 运算符(operator)的权限被拒绝错误?

标签 linux perl bash

以下简单的 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/

相关文章:

linux - 拔下 USB 内存棒后重启的 bash 脚本

bash - 从 bash 脚本发送kill -s USR1 会停止进程,而从终端执行相同操作不会停止进程

linux - 如何在 Awk 单行代码/单个命令中包含短函数?

linux - 将 bash 输出重定向到存储在变量中的路径

linux - 如何从网络上的另一台机器访问docker mediawiki?

c++ - 我们有类似 C 或 C++ 中的 perl 的 IPC::Open3 的东西吗

perl - 从 PERL 中的 DBI 语句转储准备好的 sql 查询

linux - 使用伪终端从 sudo 中删除冗长

java - 无法执行 cd/usr/bin/java

windows - 如何让 32 位 Perl 读取 64 位 Windows 注册表?