我有一个使用 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具有非零退出, fi
则set -e
可能导致脚本调用其错误处理(通常退出) 。stuff