我忙于服务器备份脚本,但复制存在一些问题。
要复制的文件,即src
$ ls -la /home/user/.ssh/authorized_keys
-rw-r--r-- 1 root root 739 Nov 2 14:19 /home/user/.ssh/authorized_keys
目标目录,即backupdir
$ ls -la /home/user/backup
total 8
drwxrwxr-x 2 user user 4096 Feb 1 21:30 .
drwxr-xr-x 48 user user 4096 Feb 1 21:17 ..
码
p="-r"
verbose=true
if $verbose; then
echo -e "cp $p ${src} ${backupdir}"
$("cp $p ${src} ${backupdir}")
else
echo -e "cp $p ${src} ${backupdir}"
$("cp $p ${src} ${backupdir}") > /dev/null
fi
输出:
cp -r /home/user/.ssh/authorized_keys /home/user/backup/
./backup: line 65: cp -r /home/user/.ssh/authorized_keys /home/user/backup/: No such file or directory
命令输出正确,命令执行正确,命令运行有问题,如所指定的,所有源和目标参数都存在,所有复制参数都存在。
我的结论是cp
在使用bash / bash-scripts
(使用sudo运行时没有改变任何东西)
答案 0 :(得分:3)
引号和命令替换都是非常错误的。引号意味着你希望shell找到一个带有空格的荒谬长名称的可执行文件,并且命令substitute $(...)
表示要获取此(不存在)命令的输出并运行 >作为一个命令。
你只想
if $verbose; then
echo -e "cp $p ${src} ${backupdir}"
fi
cp $p "${src}" "${backupdir}"
echo
命令也没用;如果要查看shell正在执行的操作,请使用set -x
。 (如果echo
为假,我猜你想要跳过$verbose
,if
内没有两个相同的条款......?)if
可以简化为$verbose && echo ...