環境:
次の擬似コードを実行するbashスクリプト(実際には他のスクリプトのラッパー)があります。
do a main function
if the main function returns:
$returncode = $? #most recent return code
if the main function runs longer than a timeout:
kill the main function
$returncode = 140 #the semi-canonical "exceeded allowed wall clock time" status
run a cleanup function
if the cleanup function returns an error: #nonzero return code
exit $? #exit the program with the status returned from the cleanup function
else #cleanup was successful
....
質問:
最後の行の後に何が起こるべきですか?
クリーンアップ関数は成功したが、メイン関数は成功しなかった場合、プログラムは 0 (クリーンアップが成功した場合) を返す必要$returncode
がありますか、それともメイン関数の (ゼロ以外で失敗した可能性がある) リターン コードを含む を返す必要がありますか?
特定のアプリケーションの場合、答えは簡単です。「それは、スクリプトが何のために必要かによって異なります」。
ただし、これはより一般的/標準的な質問です (そして、これが間違った場所である場合は、火で殺してください): Bash (または一般的に Linux) プログラミングでは、通常、「意味する」というステータスを返しますか?何か (つまり$returncode
) またはそのような主観を無視して、単に最新の関数のコードを返しますか?
これは Bash 固有のものではありません。何らかの種類のスタンドアロンの実行可能ファイルがある場合、これらの場合に標準的にどのように動作する必要がありますか? 明らかに、これはやや議論の余地があります。そういう制度があっても無視する人が多いと思います。それでも、私は知りたいです。
乾杯!