これは私のMacで書いたスクリプトです(bourneシェル「sh」を使用)。これは大きなスクリプトの一部です。
目的:zipファイルがあり、zipファイル名を事前に知っています。だから私はzipファイルを/tmp/sampleFolderに抽出したいと思います。それからそのフォルダをチェックして、私が期待するファイル名がフォルダにあることを確認したいと思います。
たとえば、zipのファイルの1つがjohn.txtの場合は確認したいと思います。
/tmp/sampleFolder/john.txt
存在する。
問題:奇妙なことに、解凍が完了する前にファイルが存在するかどうかを確認するようです。スクリプトの上に set -e を追加することでこの問題を解決できました。これにより、スクリプト内のすべてのコマンドが順番に実行されるようです。しかし、これがなぜ問題を解決するのか理解していません。
私はとても感謝します:
a.)解凍前にファイルが存在することを確認する代替ソリューション/説明
b.) または set -e がスクリプトを順次実行するように強制する理由を説明します。 set -eに関する私の研究によると、コマンドがゼロ以外の値を返すと、スクリプトは強制的に終了します。しかし、単に終了するのではなく、スクリプトが順次実行されます。それで、やるべきことが増えたようです。ありがとうございます!
#!/bin/sh
rm -rf "/tmp/sampleFolder"
unzip ~/Desktop/myFile.zip -d "/tmp/sampleFolder"
if [ ! -r /tmp/sampleFolder/john.txt ]; then
echo "file not present!"
fi
ベストアンサー1
公開されたスクリプトの文を非逐次的に実行することはできないと思います。
これは私のMacで書いたスクリプトです(bourneシェル「sh」を使用)。これは大きなスクリプトの一部です。
実際に問題がある場合は、大きなスクリプトに問題がある可能性が高いため、単純化された例には表示されません。