我正在使用命令cp error.log error$HOSTNAME.log
该命令在服务器中单独运行时可以正常工作,但如果它作为使用 ssh 的脚本运行,我会?
在文件名后附加一个 。在脚本中,我使用ssh
来自其他服务器的名称在本地复制错误日志,arerro$HOSTNAME.log
但这复制为arerror$HOSTNAME.log?
答案1
文件名实际上很可能不包含问号。相反,该ls
命令显示此字符而不是不可打印的字符。鉴于此字符出现在您在脚本中指定的文件名的末尾,它可能是一个回车符。
为什么脚本中会有回车符?因为您是在 Windows 编辑器中编辑的。 Windows 用两个字符序列 CR、LF(回车、换行)表示换行符,而 Unix 仅使用 LF 字符。因此,从 Unix 的角度来看,您的脚本包含一行,其中最后一个字符是普通字符 CR。
使用 Unix 编辑器编辑脚本,或者使用允许您使用 Unix 行结尾保存的 Windows 编辑器。
要修复已创建的文件,可以使用以下命令:
cr=$(printf '\r')
find . -name "*$cr" -exec sh -c 'for x do mv "$x" "${x%.}"; done' _ {} +