【发布时间】:2012-09-08 09:04:36
【问题描述】:
我有以下脚本示例:
#!/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 命令,则会创建目录。任何建议都是最受欢迎的。
【问题讨论】:
-
尝试将 ~ 替换为您的绝对主目录 (/home/username/)。哪个用户执行您的备份脚本(您使用的是 cron 作业吗?)
-
我打算使用 cron,是的。到目前为止,我正在通过终端手动测试它。您的解决方案有效。你能给我解释一下为什么吗?是否有任何解决方法,所以我不必将用户路径硬编码到脚本中?
-
Shell 引用是你的敌人。您可以在此处了解 shell 如何处理单引号和双引号:mywiki.wooledge.org/Quotes。
-
lanzz给出的答案是正确的。确保由正确的用户启动脚本(使用用户 shell 中的 crontab -e)