他の人のスクリプトをデバッグしていますが、次の内容が混乱しています。
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");
}
unless system("$RUN_ONCE >>$LOG 2>&1")
ファイルが存在することを確認し、特定の条件が満たされたら、ファイルを削除してシンボリックリンクを削除するようですが、何が起こっているのかわかりません。
- /usr/share/foodir/runonceがあることを確認してください。
- 存在する場合は、コマンドを実行し(そして出力をログファイルに書き込む)、ファイルを削除/リンク解除します。
しかし、混乱しています。ファイルが保持される条件がありますか?この行の状態がunless
私を混乱させます。
答え1
これはシェルスクリプトではなく、Perlです。次のスクリプトの最初の行を見ると、これを確認できます。
#!/usr/bin/perl
このunless
動詞はと同じですif not
。これはperl
、陳述の始まり、またはそれが適用される昏睡状態の終わりに「伝統的な」場所に置くことができます。
たとえば、次の文は同じです。
$a = 31 unless $b == 4;
unless ($b == 4) { $a = 31 }
if ($b != 4) { $a = 31 }
スクリプトに戻って
if (-x $RUN_ONCE) { unlink("$RUN_ONCE") unless system("$RUN_ONCE >>$LOG 2>&1"); }
この文の意味はおおよそ次のとおりです。
if $RUN_ONCE is executable then
delete it UNLESS running it returned an error exit status
つまり、プログラムを実行し、成功すると削除します。