MYSQLのheredocコマンドでtrueを終了するには?

MYSQLのheredocコマンドでtrueを終了するには?

エラー発生時に終了するためにset -eを使用するスクリプトがありますが、||強制的にtrueを返す方法がわかりません。

#!/bin/bash

        mysql -h localhost -D test -ppassword <<-RENAME
                SET FOREIGN_KEY_CHECKS=0;
                RENAME TABLE $table TO $table\_keep;
                SET FOREIGN_KEY_CHECKS=1;
        RENAME

|| trueを試してみましたが、何の役にも立ちませんでした。これにより、mysqlがインタラクティブモードになります。

#!/bin/bash
set -e
        mysql -h localhost -D test -ppassword || true <<-RENAME
                SET FOREIGN_KEY_CHECKS=0;
                RENAME TABLE $table TO $table\_keep;
                SET FOREIGN_KEY_CHECKS=1;
        RENAME

ありがとうございます!

ベストアンサー1

これだけ簡単なはずです

set -e
mysql -h localhost -D test -ppassword  <<-RENAME || true
      SET FOREIGN_KEY_CHECKS=0;
      RENAME TABLE $table TO $table\_keep;
      SET FOREIGN_KEY_CHECKS=1;
RENAME

あるいは、ifステートメントに入れることもできます。

set -e
if mysql -h localhost -D test -ppassword  <<-RENAME
      SET FOREIGN_KEY_CHECKS=0;
      RENAME TABLE $table TO $table\_keep;
      SET FOREIGN_KEY_CHECKS=1;
RENAME
then
    echo mysql was happy
else
    rc=$?
    echo mysql returned $rc
    : do something with $rc
fi

aはif condition ; then stuff; else stuff ; fitrueを返しますが、aの終了値が0以外の場合、 fiスクリプトset -eはエラー処理(通常は終了)を呼び出す可能性があります。stuff

おすすめ記事