使用 ssh wsl bash 脚本复制的文件如果不是最后一行,则末尾有一个点
File copied with ssh wsl bash script has a dot at the end if it is not the last line
我正在使用 Windows Linux 子系统 (wsl) 到 运行 一个 bash 脚本来将数据库文件从远程服务器复制到我的本地 PC以下命令:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql
该命令有效并完美地复制了数据库,但是一旦我在它下面放了另一行:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql
sleep 5
复制的数据库在名称末尾有一个点 .
(但点在行的中间),例如:databaseName.sql.
<-- 但是就像我说的,这个第二个点稍微高一点,在线的中间。
当我在复制之前查看服务器上的文件名时,它是:'databaseName.sql'$'\r'
现在,当我在 ssh 行的末尾添加 ;
时,问题就消失了,例如:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql;
sleep 5
但随后我收到一条 bash 消息,上面写着 line 1: $'\r': command not found
。除了这条消息之外,其他一切都正常,因为错误不会中断脚本的其余部分。但我想知道为什么最后没有 ;
会发生这种情况,因为该文件无法使用末尾的点。
一些错误搜索让我认为当文件被转储或类似的东西时可能会在行尾添加 space...
您的脚本使用了类似 Windows 的行尾字符(CR+LF,ASCII 序列 0x0d 0x0a
)。 0x0d
ASCII 字符,也表示为 \r
,Linux 无法将其识别为换行序列的一部分,因此它会将其包含在您的文件名中,而该字符恰好在前面它。
您的脚本可能是由 Windows 编辑器创建的,默认情况下可能已将其保存为 CRLF 格式。但是,绝大多数文本编辑器(在任何平台上)都有一个选项来控制这种行结束格式(有时通过提供 OS 平台:Window = CRLF,Unix = LF,Mac = CR),因此您必须选择 Unix / LF 选项以进行进一步编辑。
对于像您的脚本这样的现有文件,many ways 可以将它们转换为类 unix 字符,以修复您的错误。
我正在使用 Windows Linux 子系统 (wsl) 到 运行 一个 bash 脚本来将数据库文件从远程服务器复制到我的本地 PC以下命令:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql
该命令有效并完美地复制了数据库,但是一旦我在它下面放了另一行:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql
sleep 5
复制的数据库在名称末尾有一个点 .
(但点在行的中间),例如:databaseName.sql.
<-- 但是就像我说的,这个第二个点稍微高一点,在线的中间。
当我在复制之前查看服务器上的文件名时,它是:'databaseName.sql'$'\r'
现在,当我在 ssh 行的末尾添加 ;
时,问题就消失了,例如:
ssh administrator@192.168.X.X "mysqldump -uroot -ppassword databaseName" > databaseName.sql;
sleep 5
但随后我收到一条 bash 消息,上面写着 line 1: $'\r': command not found
。除了这条消息之外,其他一切都正常,因为错误不会中断脚本的其余部分。但我想知道为什么最后没有 ;
会发生这种情况,因为该文件无法使用末尾的点。
一些错误搜索让我认为当文件被转储或类似的东西时可能会在行尾添加 space...
您的脚本使用了类似 Windows 的行尾字符(CR+LF,ASCII 序列 0x0d 0x0a
)。 0x0d
ASCII 字符,也表示为 \r
,Linux 无法将其识别为换行序列的一部分,因此它会将其包含在您的文件名中,而该字符恰好在前面它。
您的脚本可能是由 Windows 编辑器创建的,默认情况下可能已将其保存为 CRLF 格式。但是,绝大多数文本编辑器(在任何平台上)都有一个选项来控制这种行结束格式(有时通过提供 OS 平台:Window = CRLF,Unix = LF,Mac = CR),因此您必须选择 Unix / LF 选项以进行进一步编辑。
对于像您的脚本这样的现有文件,many ways 可以将它们转换为类 unix 字符,以修复您的错误。