変数でのbashコマンドエラーのキャッチ


0

私はpsqlbashスクリプトで(PostgreSQL)コマンドを使用しています:

function create_database () {
       sudo -u postgres psql -c "CREATE DATABASE $1 WITH OWNER $2;" 2>ERROR
        if [[ $? -ne 0]; then
          echo "error -> $ERROR"
          return 1
        else:
         ....
         return 0
}

私はerrorそれをキャッチして変数に渡そうとしていますが、変数は空です。


公正な警告:psqlは期待どおりのエラーコードを返しません。エラーがあっても、psqlは必ずしもエラーコードを返しません(0を返します)。マニュアルを確認してください。
オーリスロン

ERRORシェルですべて大文字の変数名(など)を使用しないことをお勧めします。特別な意味を持つ多くの環境変数があり、それらの名前のいずれかを誤って使用すると、奇妙な効果を引き起こす可能性があります。この点では、大文字小文字の混在変数の方が安全です。
ゴードンデイヴィ

回答:


3

2>ERRORstderr出力をERROR変数ではなく、という名前のファイルに送信します。代わりに以下を試してください:

ERROR=$(sudo -u postgres psql -c "CREATE DATABASE $1 WITH OWNER $2;" 2>&1 1>/dev/null)

私はSTDOUT nullに行き、そして他に異なるメッセージを表示したいので、それを行うことはできません
user3541631

1
@ user3541631。stdoutがに送信されるように、回答を更新しました/dev/null
md2perpe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.