【发布时间】:2016-10-17 00:09:24
【问题描述】:
这是一个小sn-p来展示问题
#/usr/bin/bash
RSYNC=/usr/bin/rsync
RSYNC_OPTIONS="-aq --backup --suffix=~ --backup=bkpdir --update"
echo ${RSYNC_OPTIONS}
DOCDIR="Documents" # Note : no trailing slash
BKPDIR="Active-Backups"
HOST=$(hostname)
SRCDIR_DOC="~om/${DOCDIR}/" # Trailing slash added
DESTDIR=$(readlink -f $(dirname "$0") )/${BKPDIR}/${HOST}
echo "DESTDIR = ${DESTDIR}"
echo "Backing up ${SRCDIR_DOC}"
echo "${RSYNC} ${RSYNC_OPTIONS} ${SRCDIR_DOC} ${DESTDIR}/${DOCDIR}"
set -x
${RSYNC} ${RSYNC_OPTIONS} ${SRCDIR_DOC} ${DESTDIR}/${DOCDIR}
set +x
echo "Backup complete."
输出是
[1329]$ bash generic-doc-dow-backup.sh
-aq --backup --suffix=~ --backup=bkpdir --update
DESTDIR = /run/media/om/seagate1/Active-Backups/e6431
+ echo 'Backing up ~om/Documents/'
Backing up ~om/Documents/
+ echo '/usr/bin/rsync -aq --backup --suffix=~ --backup=bkpdir --update ~om/Documents/ /run/media/om/seagate1/Active-Backups/e6431/Documents'
/usr/bin/rsync -aq --backup --suffix=~ --backup=bkpdir --update ~om/Documents/ /run/media/om/seagate1/Active-Backups/e6431/Documents
+ /usr/bin/rsync -aq --backup '--suffix=~' --backup=bkpdir --update '~om/Documents/' /run/media/om/seagate1/Active-Backups/e6431/Documents
rsync: change_dir "/run/media/om/seagate1//~om/Documents" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
+ set +x
Backup complete.
我们可以看到,bash 尝试运行的实际命令是
/usr/bin/rsync -aq --backup '--suffix=~' --backup=bkpdir --update '~om/Documents/' /run/media/om/seagate1/Active-Backups/e6431/Documents
我不明白为什么要引用 ~ (和周围的参数)? Bash 可以,但是如何阻止呢?
嗯,我使用 .bak 后缀和 ${HOME} 使脚本运行良好。我还是很好奇...
谢谢
【问题讨论】: