首页 > 解决方案 > 复制目录

问题描述

我对 bash 脚本完全陌生,但想尝试一下。我为备份目录编写了一个简单快捷的脚本。

#!/bin/bash

echo "Enter your source"
read source

echo "Enter your target"
read target

backup(){
    cp -r $source $target
}

backup source target

exit 0

但是,一旦我运行它,它就无法识别目录路径。它给出了:cp: cannot stat '~/Desktop/week46': No such file or directory即使目录存在并且当我手动运行cp -r ~/Desktop/week46 ~/Desktop/week47它时它正在工作。

我究竟做错了什么?

标签: bashscripting

解决方案


该程序无法解析目录路径,因为 read 函数将输入作为单引号中的字符串读取(因此它不会插入/扩展它的内容)。所以它正在执行的内容等价于cp -r '~/Desktop/week46' '~/Desktop/week47'.

当您在 shell 中执行时,您传递的是不带引号的,因此 shell 可以轻松解析相对路径。

您可以尝试使用readlink dirname和探索一些解决方法basename

一种可能的解决方案可能是:

RES_PATH=$(readlink $(dirname $source))
FILE=$(basename $source)
SRC=${RES_PATH}/${FILE}

推荐阅读