我有一个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
我可以启动任何此命令,它在终端中正常工作 但是,如果我取消注释真正的复制命令并启动脚本,我将收到错误:
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
为什么我有这个错误,我该如何解决?
答案 0 :(得分:3)
我认为问题出在~
标志上。如果echo按原样打印,则表示它在工作目录中查找名为~
的目录。您可以将~
替换为$HOME
,或尝试以不同的方式执行命令。
答案 1 :(得分:2)
这不起作用,因为很可能在您的$working_directory
变量定义中,您引用了波浪号~
,因此bash中的波浪扩展无法正常工作。
如果一个单词以不带引号的代字号字符('〜')开头,则所有 字符直到第一个未加引号的斜杠(或所有字符,如果有的话) 是没有不带引号的斜杠)被认为是波浪号前缀。如果没有 引用了波浪号前缀中的字符,中的字符 波浪号后面的波浪号前缀被视为可能的登录名。
~ The value of $HOME ~/foo $HOME/foo
答案 2 :(得分:0)
看起来作为变量一部分的波浪号~
未被展开。
也许先试试这个?:
eval working_directory=$working_directory