[英]Why is 'cp' failing in this shell script?
这是我编写的shell脚本的代码片段:
for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
src=$(basename ${src})
dest="~/.${src}"
copy="${src} -> ${dest}"
cp $src $dest && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done
由于某种原因, cp
无法执行。 例如,在$src='bashrc'
的情况下,我收到此错误:
cp: ~/.bashrc: No such file or directory
我不明白为什么会发生这种情况,因为很明显, ~/.bashrc
是目的地 ,而不是源,所以cp
不应该关心它是否存在。 究竟出了什么问题?
尝试使用$HOME
而不是~/
作为您的主目录。
dest="$HOME/.$src"
此外,如果您的任何文件名中都有空格,您可能希望在$src
和$dest
变量周围加上引号。
cp "$src" "$dest" && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
当出现在双引号中时,“〜”不会扩展到您的主目录。 请改用"${HOME}/.${src}"
。 还要考虑使用另一种方法,当文件名包含空格时(哦,我只需要考虑我们所有的傻mp3文件及其中的空格!)。 而不是做
for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
# ...
done
比较喜欢
find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc | while read src
do
# ...
done
因此,通过结合@sirlancelots和我的空间修复,我们得到:
find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc | while read src
do
src=$(basename "${src}")
dest="${HOME}/.${src}"
copy="${src} -> ${dest}"
cp "$src" "$dest" && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done
你已经逃过了〜所以它不会扩展而且cp不知道该怎么做。
同
dest=~/".${src}"
bash应该这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.