Linux
執行在 shell 中作為腳本執行的命令
在 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。
有的被打散了。這似乎與逃避有關。出於某種原因,在行尾添加一個空格使其有點工作,但仍然不是沒有錯誤。
Google搜尋錯誤顯示了一些關於使用的命中
--
並將其與尾隨空格一起添加使得一些命令工作但仍然給出轉義錯誤。
我願意為您在 Windows 機器上或從Windows機器上編輯此文件的甜甜圈花錢。
Linux 使用 \x0a(ASCII 程式碼 10)來分隔文件(或腳本)中的行。
Windows 使用 \x0d(“Carriage_Return”,ASCII 程式碼 13)和 \x0a(“換行”,ASCII 10)的組合來完成相同的工作。
將 Windows 編輯的文件提供給 Linux 機器,它會看到每一行末尾都有一個無關的 \x0d。
給自己一個像樣的Windows 編輯器(NotePad++是免費的,強烈推薦)或學習如何使用vi。當然,它有自己的學習曲線,但它的某些功能可能會讓您大吃一驚!