Linux

執行在 shell 中作為腳本執行的命令

  • February 25, 2022

在 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。當然,它有自己的學習曲線,但它的某些功能可能會讓您大吃一驚!

引用自:https://serverfault.com/questions/1094756