mip*_*adi 2 bash shell scripting
这是我编写的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
Run Code Online (Sandbox Code Playgroud)
由于某种原因,cp无法执行.例如,在这种情况下$src='bashrc',我收到此错误:
cp: ~/.bashrc: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样,不过,因为很明显,~/.bashrc就是目标,没有来源,因此cp不应该关心它是否存在与否.究竟出了什么问题?
mat*_*pie 10
尝试使用$HOME而不是~/您的主目录.
dest="$HOME/.$src"
Run Code Online (Sandbox Code Playgroud)
此外,如果您的任何文件名中都有空格,则可能需要在变量$src和$dest变量周围加上引号.
cp "$src" "$dest" && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
Run Code Online (Sandbox Code Playgroud)
当出现在双引号中时,"〜"不会扩展到您的主目录.请"${HOME}/.${src}"改用.还要考虑使用另一种方法,当文件名包含空格时(哦,我只需要考虑我们所有的傻mp3文件及其中的空格!).而不是做
for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
# ...
done
Run Code Online (Sandbox Code Playgroud)
比较喜欢
find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc | while read src
do
# ...
done
Run Code Online (Sandbox Code Playgroud)
因此,通过结合@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
Run Code Online (Sandbox Code Playgroud)