Shell
為什麼這個 shell 腳本在 bash 中失敗,但命令在 SSH 中有效?
我正在嘗試編寫的是一個 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
。