CENTOS 7: 运行 mysqldump 在 shell 中没有 user/password 但错误

CENTOS 7: Running mysqldump without user/password in shell but errors

我想 运行 CentOS 7 中的 bash 脚本在终端中导出数据库转储。然而,它以错误结束。

backup_test.sh

#!/bin/bash

thisthing=fiveminute
dumpfile=db-${thisthing}-`date +%Y%m%d%H%M`.sql
mysqldump database_name > $dumpfile.tmp 
mv $dumpfile.tmp $dumpfile

我已经设置了我的 ~/.my.cnf 以便能够 运行 转储而无需询问用户密码:

.my.cnf

[mysqldump]
user=username
password=password
skip-extended-insert
skip-dump-date

从终端执行

[site.backup@localhost ~]$ ./backup_test.sh

这会导致以下错误:

-bash: ./backup_test.sh: /bin/bash^M: bad interpreter: No such file or directory

谁能指导我哪里出错了??

编辑 #1

权限设置正确,因为backup_test.sh设置为可执行

解决方案

问题是由于基于 Windows 的行结尾,\r,我猜我将脚本从基于 Windows 的文件复制到 Centos 文件中,因此出现错误。

要在 vim 中将脚本从 Windows 编码更改为 Unix,您还可以使用 :set ff=unix 然后保存文件,或者 :set ff=dos 再次获取 DOS 格式.

您的 shebang 行(即 ^M)部分有 windows 个行尾字符 (\r)。 运行 dos2unix 在你的脚本上,你应该是好的。

如果您没有dos2unix,以下将适用于 GNU sed(在 CentOS 7 上应该是默认设置):

sed -i 's/\s*$//' backup_test.sh

这将删除每行末尾的空格(包括\r),所以如果行尾有重要的空格(这似乎不是这种情况),请不要这样做用你的脚本)