关于bash:CENTOS 7:在shell中运行没有用户/密码但没有错误的mysqldump

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

本问题已经有最佳答案,请猛点这里访问。

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

backup_test.sh

1
2
3
4
5
6
#!/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

1
2
3
4
5
[mysqldump]
user=username
password=password
skip-extended-insert
skip-dump-date

从终端执行

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

这最终会出现以下错误:

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

谁能指导我哪里错了?

编辑#1

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

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

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


您的shebang行(即^M)部分中有行尾字符(
)。 在你的脚本上运行dos2unix,你应该很好。

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

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

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