Bash CENTOS 7:在shell中运行mysqldump时没有用户/密码,但出现错误
我想在终端的CentOS 7中运行bash脚本以导出数据库转储。然而,它以错误结束 backup\u test.shBash CENTOS 7:在shell中运行mysqldump时没有用户/密码,但出现错误,bash,shell,mysqldump,Bash,Shell,Mysqldump,我想在终端的CentOS 7中运行bash脚本以导出数据库转储。然而,它以错误结束 backup\u 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设置为可以运行转储,而无需询问用户密码: .m
#!/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上应为默认设置):
这将删除每行末尾的空白(包括
\r
),因此,如果行末尾有重要的空白,请不要这样做(您的脚本似乎不是这样)如何在脚本上运行dos2unix?@GhazanfarMir运行dos2unix backup_test.sh
然后正常运行backup_test.sh
我会遇到以下错误:bash:dos2unix:command not found…@GhazanfarMir查看我的更新以获得替代解决方案感谢Eric-我使用VIM成功地做到了这一点:
sed -i 's/\s*$//' backup_test.sh