Bashスクリプト戻り値エラー

Bashスクリプト戻り値エラー

次のbashスクリプトがあります。

rm ~/sqoop/"$TABLE"/*
rmdir ~/sqoop/"$TABLE"
return $?

このスクリプトを実行した後、次のプロセスに値を返しますが、スクリプトが正常に実行され、スクリプトのすべてのステップが正常に完了しても1を返します。

これにより、次のプロセスは発生しません。

return ステートメントを削除すると、残りのプロセスが円滑に進行します。この問題は、Ubuntu 14を搭載したHadoopクラスタとUbuntu 16を持つ新しいクラスタをアップグレードした後に発生しました。

ここでreturnコマンドを削除すると問題が何であるか、次のプロセスがどのように正常に実行されるのか、returnステートメントを削除すると、本番環境にどのような影響があるのか​​を理解できますか?

ベストアンサー1

return文が関数またはドットスクリプト(ソーススクリプト)で実行されない場合、文はエラーを返します。

シェル関数とドットスクリプトではを使用しますreturnexit

次のような短いスクリプト

#!/bin/bash

return 0

エラーメッセージが生成されます

line 1: return: can only `return' from a function or sourced script

$?そして1に設定します。

スクリプトを明示的に終了しない場合exit(または終了コードを指定せずに終了する場合exit)、スクリプト全体の戻りコードは最後に実行されたコマンドと同じです。

have はexit "$?"plain と同じexitで、スクリプトの最後にあれば完全に省略できます。


$HOME通常、スクリプトではチルダの代わりにチルダを使用することをお勧めします。$HOMEチルダは別の拡張フェーズで拡張されますが、チルダは他の変数のように機能するためです。つまり、変数として機能せず、引用符付き文字列内では拡張されません。$HOMEまた、より説明的でスクリプトなので、いくつかの追加のキーストロークを使用してコードを読みやすくすることができます。

おすすめ記事