2012-09-15 72 views
1

我有以下腳本示例:巴什腳本命令mkdir錯誤

#!/bin/bash 

# Aborts the script on "simple command failure" (does not cover pipes) 
set -e 

# Makes sure we do not run the script outside the correct directory (i.e. the backup directory) 
projects_directory='~/projects' 
backup_drectory="${projects_directory}/backup/" 
echo "Backup directory: ${backup_drectory}" 

if [ ! -d "$projects_directory" ]; then 
    mkdir "$projects_directory" 
    echo "${projects_directory} created successfully" 
fi 

與下面的輸出悲慘的失敗了:

Backup directory: ~/projects/backup/ 
mkdir: cannot create directory `~/projects': No such file or directory 

我不明白爲什麼。如果我在終端中手動輸入mkdir ~/projects命令,則會創建該目錄。任何建議是最受歡迎的。

+0

嘗試用您的絕對主目錄(/ home/username /)替換〜。哪個用戶執行備份腳本(你使用的是cron作業?) – Gregor

+0

我打算使用cron,是的。到目前爲止,我正在通過終端手動測試它。 您的解決方案有效。你能向我解釋爲什麼? 是否有任何解決方法,所以我不必將用戶路徑硬編碼到腳本中? –

+2

殼牌報價是你的敵人。你可以閱讀shell如何處理單引號和雙引號:http://mywiki.wooledge.org/Quotes。 – Telemachus

回答

6

卸下單引號:

projects_directory=~/projects 

的引述防止殼從擴大~字符。

+0

謝謝!初學者的錯誤;) –

+4

+1。我也推薦使用'mkdir -p'(根據需要製作父目錄)。 – Johnsyweb

+1

感謝x2!所以我不需要檢查'〜/ projects'是否存在,我可以直接發出'mkdir -p〜/ projects/backup'。你讓我的一天先生! –