如何从 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

请注意,aif condition ; then stuff; else stuff ; fi将返回 true,但如果 a具有非零退出, fiset -e可能导致脚本调用其错误处理(通常退出) 。stuff

相关内容