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
),所以如果行尾有重要的空格(这似乎不是这种情况),请不要这样做用你的脚本)
我想 运行 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
),所以如果行尾有重要的空格(这似乎不是这种情况),请不要这样做用你的脚本)