2013-06-20 13 views
5

Il seguente semplice script Perl elencherà il contenuto di una directory, con la directory elencata come argomento per lo script. In che modo, su un sistema Linux posso acquisire errori di autorizzazione negati? Attualmente se questo script viene eseguito su una directory a cui l'utente non ha permessi di lettura, non accade nulla nel terminale.Come ottengo gli errori di autorizzazione negati dall'operatore glob?

#!/bin/env perl 

use strict; 
use warnings; 

sub print_dir { 
foreach (glob "@_/*") 
    {print "$_\n"}; 
} 

print_dir @ARGV 
+0

Quello che stai chiedendo sarebbe un comportamento atipico da un 'glob'. 'stat' può dirti se hai accesso alla directory. –

+0

Capisco che glob non abbia consapevolezza delle autorizzazioni dell'utente, ma presumo che la shell restituisca un errore allo script ma non viene stampato, non è corretto? Sono interessato a come rilevare l'errore dalla shell e stamparlo. – GL2014

+0

Vedo cosa intendi ora, ho appena provato echo/root/* e non restituisce un errore nella shell. Grazie. – GL2014

risposta

5

La funzione glob non ha molto controllo degli errori, se non che $! viene impostata se l'ultima glob fallisce:

glob "A/*"; # No read permission for A => "Permission denied" 
print "Error globbing A: $!\n" if ($!); 

Se il glob riesce a trovare qualcosa più tardi, non sarà impostato $!, anche se. Ad esempio glob "*/*" non segnala un errore anche se non è in grado di elencare il contenuto per una directory.

La funzione bsd_glob dal modulo standard File::Glob consente di impostare un flag per consentire affidabile segnalazione degli errori:

use File::Glob qw(bsd_glob); 
bsd_glob("*/*", File::Glob::GLOB_ERR); 
print "Error globbing: $!\n" if (File::Glob::GLOB_ERROR); 
0

Usa File :: Find, che è un modulo di base ed è in grado di controllare tutto su un file.

#!perl 
use 5.10.0; 
use strict; 
use warnings; 
use File::Find; 
find { 
    wanted => sub { 
     return if not -r $_; # skip if not readable 
     say $_; 
    }, 
    no_chdir => 1, 
}, @ARGV; 
Problemi correlati