このコード スニペットを含む Perl スクリプトがあります。これは、システム シェルを呼び出して SFTP でいくつかのファイルを取得し、WinZip で解凍します。
# Run script to get files from remote server
system "exec_SFTP.vbs";
# Unzip any files that were retrieved
foreach $zipFile (<*.zip>) {
system "wzunzip $zipFile";
}
一部のファイルが取得されたとしても、ファイルが取得されて SFTP 接続が閉じられるまでに、Perl スクリプトは既に解凍ステップを完了しており、解凍するものが見つからないため、それらのファイルは決して解凍されません。
私の短期的な修正は、挿入することです
sleep(60);
ただし、これは SFTP 接続が 60 秒以内に終了することを前提としているため、大幅に過大評価されることもあれば、過小評価されることもあります。
解凍ステップに進む前に、SFTP 接続が閉じられるまで Perl を一時停止させるより適切な方法はありますか?
編集: レスポンダーは、Perl にファイル転送を行わせるのではなく、VB スクリプトを使用することに疑問を呈しました (そして当然のことながら)。これはセキュリティに関係しています。VB スクリプトは他の人によって管理されており、SFTP を実行する権限があります。