O que esta ação de script de desconexão está fazendo e sob quais condições?

0

Estou depurando o script de outra pessoa e estou confuso com isso:

my $LOG = "/var/log/installfoo.log";
my $APPDIR = "/usr/share/foodir"
my $RUN_ONCE = "$APPDIR/runonce";

# check for script
if (-x $RUN_ONCE) {

    unlink("$RUN_ONCE") unless system("$RUN_ONCE >>$LOG 2>&1");

}

Acho que está verificando se existe um arquivo e depois excluindo (e removendo quaisquer links simbólicos) se uma condição específica for atendida ... mas não sei o que o unless system("$RUN_ONCE >>$LOG 2>&1") está fazendo.

  • Verifique se o / usr / share / foodir / runonce existe.
  • Execute o comando se presente (e grave a saída em um arquivo de log) e exclua / desvincule o arquivo.

Mas estou confuso - há alguma condição em que o arquivo permaneça? A condição unless desta linha está me confundindo.

    
por Mike B 20.07.2017 / 20:34

1 resposta

4

Este não é um script de shell, é perl. Você deve poder ver isso olhando a primeira linha do script, que pode ser algo como

#!/usr/bin/perl

O verbo unless é equivalente a um if not . Em perl , pode ser colocado no início de uma declaração no local "tradicional" ou no final do comae ao qual se aplica.

Por exemplo, essas declarações são todas equivalentes:

$a = 31 unless $b == 4;
unless ($b == 4) { $a = 31 }
if ($b != 4) { $a = 31 }

Voltar para o seu script,

if (-x $RUN_ONCE) {
    unlink("$RUN_ONCE") unless system("$RUN_ONCE >>$LOG 2>&1");
}

O que isto está dizendo é aproximadamente equivalente a isto:

if $RUN_ONCE is executable then
    delete it UNLESS running it returned an error exit status

Em outras palavras, execute o programa e exclua-o se a execução foi bem-sucedida.

    
por 20.07.2017 / 21:18

Tags