正如其他许多人所做的那样,我想创建一个存储我的dotfile自定义的repo。我没有手动执行ln -s
,而是使用以下脚本进行设置。
#!/bin/bash
set -e
DIR="$HOME/Documents/Dotfiles"
OLDDIR="$HOME/Documents/Other\ Files/Dotfiles_old"
FILES=($HOME/.bash_profile)
echo "Creating $OLDDIR for backup of any existing dotfiles in ~"
mkdir -p "$OLDDIR"
echo "…done"
echo "Changing to the $DIR directory"
cd "$DIR"
echo "…done"
for FILE in "${FILES[@]}"; do
echo "Backup dotfile $FILE from ~/ to $OLDDIR"
cp -L "$HOME/$FILE" "$OLDDIR"
done
for FILE in "${FILES[@]}"; do
echo "copy $FILE from ~ to $DIR."
cp -L "$HOME/$FILE $DIR/"
echo "Creating symlink to $FILE from ~ to $DIR."
ln -sfn "$DIR/$FILE" "$HOME/$FILE";
done
shellcheck source "$HOME/.bash_profile"
当我运行时,cp
失败,因为它认为.bash_profile
不在那里,显然不是这样:
https://docs.asp.net/en/latest/security/cors.html
我认为我的文件路径可能不正确,但shellcheck
没有报告任何内容。我忘记了什么?
更新:在此处再次运行 - 减去cp
。我仍然不确定的一件事是使用exit
,特别是因为我已经使用-e
来检查错误。
Shellcheck和bash -n
返回0。
#!/bin/bash
set -e
function makeFiles() {
touch .bash_profile \
touch .gitconfig \
touch .gitignore_global
}
function makeLinks() {
ln -sfn ~/Documents/Dotfiles/.bash_profile ~/.bash_profile \
ln -sfn ~/Documents/Dotfiles/.gitconfig ~/.gitconfig \
ln -sfn ~/Documents/Dotfiles/.gitignore_global ~/.gitignore_global \
source ~/.bash_profile
}
read -rp "This may overwrite existing files. Are you sure? (y/n) " -n 1;
echo "";
if [[ $REPLY =~ ^[Yy]$ ]]; then
makeFiles && makeLinks
fi;
叹息,ln
决定.bash_profile
出于某种疯狂的原因需要成为目录。
答案 0 :(得分:0)
您正在错误地构建dotfile的路径 - $FILE
已经包含了dotfile的完整路径,并且不需要再次添加$HOME
。尝试使用此cp
命令:
cp -L "$FILE $DIR/"