2012-09-15 46 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'。你让我的一天先生! –