2017-08-03 17 views
1

次の1つのライナーbashシェルコマンドを使用して、カスタムエラーメッセージを生成しようとしています。私は "errorMessage" varのセットを取得していないよ。しかし、コマンドを個別に実行すると、エラーメッセージを$ errorMessage変数に取り込むことができます。 私は何が欠けていますか?Linux Bashシェルのカスタムエラーメッセージ

コマンド:

[ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 

試験/出力:

$ [ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 
Something Went Wrong; Error is: 
$ echo $errorMessage 

$ errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) 
$ echo $errorMessage 
mkdir: cannot create directory `/path': Permission denied 
+0

ところで、これを見ると、これは非常によく尋ねられる質問です。これは、サイトに新しいユーザーにとってよくあることです。手伝ってくれてありがとう! –

答えて

2

[testというコマンドです。実行する個々のテストを指定する引数が与えられていない場合、デフォルトは-n(文字列が空であるかどうかをテストする)です。このコードは、文字列"errorMessage="(stderrの接尾辞がmkdirである可能性があります)が空であるかどうかをテストしています。固定接頭語が含まれているため、エラーが発生したかどうかにかかわらず、は決してになります。

あなたが実際に変数に値を代入したい場合は、その代わりに次のようになります。

errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) \ 
    || echo "Something Went Wrong; Error is: ${errorMessage}" 

これはmkdir終了ステータスをチェックしている、とechoを実行すると、それがゼロ以外でなければなりません。

+0

驚くばかり!それは私のために働く。 – MaxGrand

関連する問題