我有一个bash脚本,它可以查看文件夹并将文件从一个文件夹复制到另一个文件夹。脚本是足够大的,但是这里只有两行代码:
echo cp $working_directory/$folder_name/$f $new_filename
# cp $working_directory/$folder_name/$f $new_filename以下是echo命令的输出:
cp ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_1.pdf
cp ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_2.pdf我可以启动任何一个命令,它在终端上运行良好。
但是,如果我取消注释真正的copy命令并启动脚本,我就会得到错误:
cp ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_1.pdf
cp: ~/MEGAsync/development/experiments/bash_renamer/tres/a.pdf: No such file or directory
cp ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf ~/MEGAsync/development/experiments/bash_renamer/tres_2.pdf
cp: ~/MEGAsync/development/experiments/bash_renamer/tres/b.pdf: No such file or directory为什么我有这个错误,以及如何修复它?
发布于 2014-07-25 18:59:43
我认为问题在于~标志。如果回送按原样打印,就意味着它在工作dir中查找名称为~的目录。您可以将~替换为$HOME,也可以尝试以不同的方式执行命令。
发布于 2014-07-25 19:17:02
这是不起作用的,因为很可能在$working_directory变量定义中引用了tilde ~,因此bash中的tilde扩展不起作用。
Tilde Expansion 如果一个单词以未引号的字符(‘~’)开头,则直到第一个未引号斜杠为止的所有字符(或所有字符,如果没有引号斜杠)都被视为倾斜前缀。如果不引用倾斜前缀中的任何字符,则可以将倾斜前缀后面的字符视为可能的登录名。 ~ $HOME ~/foo $HOME/foo的值
发布于 2014-07-25 19:01:17
它看起来是变量的一部分的倾斜~没有被扩展。也许先试一下?:
eval working_directory=$working_directoryhttps://stackoverflow.com/questions/24962672
复制相似问题