当直接在命令行中键入mysqldump命令时,它可以工作,但不能在shell脚本中

当直接在命令行中键入mysqldump命令时,它可以工作,但不能在shell脚本中,mysql,shell,centos,mysqldump,Mysql,Shell,Centos,Mysqldump,我刚刚开始使用shell脚本,以避免反复键入相同的命令。此命令用于将数据库复制到从属服务器,作为设置MySQL数据库复制的一部分 当直接在命令提示符中键入时,它会起作用: mysqldump --host=192.168.1.1 –uUSER –pPASSWORD --opt database_name | mysql --host=192.168.1.2 –uUSER –pPASSWORD -C database_name 用户、密码和数据库名称都将替换为实际脚本中的实际值 当我在scri

我刚刚开始使用shell脚本,以避免反复键入相同的命令。此命令用于将数据库复制到从属服务器,作为设置MySQL数据库复制的一部分

当直接在命令提示符中键入时,它会起作用:

mysqldump --host=192.168.1.1  –uUSER –pPASSWORD --opt database_name | mysql --host=192.168.1.2 –uUSER –pPASSWORD -C database_name
用户、密码和数据库名称都将替换为实际脚本中的实际值

当我在scripts.sh文件中键入此命令时,为其授予执行权限,然后使用./scripts.sh I get运行它:

'RROR1102 (42000): Incorrect database name 'database_name
mysqldump: Got errno 32 on write

是什么导致了这个错误?当命令包含在shell脚本中时,是否需要以某种方式修改该命令?

数据库名称所在的变量末尾有一个。您可能需要通过
dos2unix
运行脚本,或者如果您是从外部源获取数据库名称,则可以使用此站点上的解决方案之一从数据中剥离CRs。

谢谢您的想法。我使用VI编辑器直接在文件中键入命令,因此没有外部源,行后也没有CR…如果我使用VI创建一个文件,并在其中键入一行,然后保存,我是否可能添加了CR?@Dan:取决于默认情况下设置使用以VI结尾的行。Ok cool。非常感谢。我将再次从该文件开始,并研究默认的行返回。它现在正在工作-我在那里得到了一个CR,尽管它不可见。当我重新开始使用一个新文件时,一切都很好。我不需要更改默认的换行符或任何东西。谢谢