bash - 复制目录
问题描述
我对 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
它时它正在工作。
我究竟做错了什么?
解决方案
该程序无法解析目录路径,因为 read 函数将输入作为单引号中的字符串读取(因此它不会插入/扩展它的内容)。所以它正在执行的内容等价于cp -r '~/Desktop/week46' '~/Desktop/week47'
.
当您在 shell 中执行时,您传递的是不带引号的,因此 shell 可以轻松解析相对路径。
您可以尝试使用readlink
dirname
和探索一些解决方法basename
。
一种可能的解决方案可能是:
RES_PATH=$(readlink $(dirname $source))
FILE=$(basename $source)
SRC=${RES_PATH}/${FILE}
推荐阅读
- c# - 使用 C# 将数据拆分为 csv 中的两列
- c# - 没有为此对象定义无参数构造函数。MVC 5
- jupyter-notebook - 安装新 Windows 后如何恢复 Anaconda 中的所有数据
- php - 如何在laravel php中通过google map api获取地址的完整详细信息
- excel - 有什么办法可以增加Excel中文本和下划线之间的差距?
- sql - 在sql中对员工姓名进行排序时如何优先考虑单个员工?
- python-3.6 - 使用 python 3.6 windows 安装 pytesseract 时出错
- c - 如何防止在输出区域打印打印输入键(\n)
- automation - 如何在 powerbuilder 中自动准备文本文件
- azure - 我想在雪花中加载我的时间戳列