Shell

為什麼這個 shell 腳本在 bash 中失敗,但命令在 SSH 中有效?

  • December 7, 2018

我正在嘗試編寫的是一個 shell 腳本,它將備份一個網站和所有支持它的 MySQL 數據庫。我在整個網路上都找到了範例,但是當我在被監禁的 SSH 會話中以 bash 執行腳本時,它失敗了。如果我直接在 SSH 會話中輸入命令,它們就可以正常工作。

#!/bin/sh

DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password

mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql

tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar

該腳本位於 Web 伺服器上,因此出於測試目的,我通過 SSH 連接到伺服器,cd進入目錄,然後執行bash backup.sh. mysqldump沒有連接,似乎無法傳遞密碼(它返回錯誤報告“使用密碼:否”)。然後 tar 命令失敗,報告它不能/home/website/public_html用“沒有這樣的文件或目錄”來統計。 tar然後報告它由於先前的錯誤而以錯誤狀態退出。

我在這裡想念什麼?

通過登錄伺服器並執行來檢查腳本的 Windows 行尾

cat -v /path/to/script

如果該行以 結尾^M,那就是問題所在。

您可以通過執行修復帶有斷行結尾的文件

dos2unix /path/to/script

如果伺服器上不存在 dos2unix,您可以改用 sed,如下所示:

sed -i 's/\r$//' /path/to/script

您已將使用者名分配給變數THEUSER,但您的mysqldump命令正在使用該變數THEDBUSER

引用自:https://unix.stackexchange.com/questions/128637