在 shell 中运行以下命令可以正常运行:
ssh user@machine systemctl status my-service.service
ssh user@machine sudo systemctl stop my-service.service
scp -r ./my-service/* user@machine:/home/user/my-service
ssh user@machine chmod +x /home/user/my-service/my-service
ssh user@machine sudo systemctl start my-service.service
ssh user@machine sudo systemctl status my-service.service
但是,将其放在deploy.sh
文件中会导致上述任何一项都无法执行。
错误:
- 无效的单元名称“my-service”被转义为“my-service\x0d”(也许你应该使用systemd-escape?)
- 找不到单元 my-service\x0d.service。
- 无效的单位名称“my-service.service”被转义为“my-service.service\x0d”(也许你应该使用systemd-escape?)
- 无法停止 my-service\x0d.service:未加载单元 my-service.service\x0d.service。: 没有这样的文件或目录nlock/
- chmod: 无法访问'/home/user/my-service/my-service'$'\r': 没有这样的文件或目录
- 无效的单位名称“my-service.service”被转义为“my-service.service\x0d”(也许你应该使用systemd-escape?)
- 无法启动 my-service.service\x0d.service:未找到单元 my-service.service\x0d.service。无效的单位名称“my-service.service”被转义为“my-service.service\x0d”(也许你应该使用systemd-escape?)
- 找不到单元 my-service.service\x0d.service。
有的被打散了。这似乎与逃避有关。出于某种原因,在行尾添加一个空格使其有点工作,但仍然不是没有错误。
谷歌搜索错误显示了一些关于使用的命中--
并将其与尾随空格一起添加使得一些命令工作但仍然给出转义错误。
我愿意为您在 Windows 机器上或从Windows机器上编辑此文件的甜甜圈花钱。
Linux 使用 \x0a(ASCII 代码 10)来分隔文件(或脚本)中的行。
Windows 使用 \x0d(“Carriage_Return”,ASCII 代码 13)和 \x0a(“换行”,ASCII 10)的组合来完成相同的工作。
将 Windows 编辑的文件提供给 Linux 机器,它会看到每一行末尾都有一个无关的 \x0d。
给自己一个像样的Windows 编辑器(NotePad++是免费的,强烈推荐)或学习如何使用vi。当然,它有自己的学习曲线,但它的某些功能可能会让您大吃一惊!