因此,我试图使用Bash来自动化dotfile。在你问之前,这不是问题所在。我已经弄清楚了这个部分。这里是我的代码看起来是什么样子的:
configs=(
~/.config/alacritty
~/.config/dunst
~/.config/flameshot
~/.config/i3
~/.config/i3status
~/.config/kitty
~/.config/nvim
~/.config/picom
~/.config/rofi
~/.config/gtk-3.0
~/.config/obs-studio
~/.config/sway
~/.config/waybar
~/.config/swappy
~/.config/mako
~/.config/swaylock
~/.config/Code\ -\ OSS/User/settings.json
)
for name in "${configs[@]}"; do
if [ ! -e "$name" ]; then
echo "$name does not exist."
ln -sfv "$HOME/Dotfiles/configs/${name##*/}" "$name"
else
echo "$name exists."
fi
done这里有个问题。它的工作非常好,直到它尝试符号链接~/.config/Code\ -\ OSS/User/settings.json。当符号链接时,Bash脚本会忽略直到最后一个/为止的所有内容。
这意味着当我运行脚本时,它会在~/.config/Code\ -\ OSS/User/settings.json中创建一个指向~/Dotfiles/configs/settings.json的文件,而不是我在Dotfiles中创建的Code\ -\ OSS目录。
我如何设置它,以便将上面数组中的所有文件都符号链接起来,以便重定向到相应的Dotfiles文件?
发布于 2021-01-27 07:05:14
集中于数组中的最后一个元素,您将执行:
ln -sfv "$HOME/Dotfiles/configs/settings.json" ~/.config/Code\ -\ OSS/User/settings.json(假设子目录已经存在)
然后创建以下符号链接:
~/.config/Code\ -\ OSS/User/settings.json -> ~/Dotfiles/configs/settings.json(请注意,lhs是符号链接名,rhs是实际文件。)
你提到的结果是非常自然的行为。相反,如果要创建符号链接,如:
~/.config/Code\ -\ OSS/User/settings.json -> ~/Dotfiles/configs/Code\ -\ OSS/User/settings.json然后你需要说:
for name in "${configs[@]}"; do
if [ ! -e "$name" ]; then
echo "$name does not exist."
ln -sfv "$HOME/Dotfiles/configs/${name#*config/}" "$name"
else
echo "$name exists."
fi
donehttps://stackoverflow.com/questions/65912723
复制相似问题