带有脚本的符号链接dotfiles

时间:2016-09-09 03:12:52

标签: bash dotfiles

正如其他许多人所做的那样,我想创建一个存储我的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

enter image description here

我认为我的文件路径可能不正确,但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出于某种疯狂的原因需要成为目录。

1 个答案:

答案 0 :(得分:0)

您正在错误地构建dotfile的路径 - $FILE已经包含了dotfile的完整路径,并且不需要再次添加$HOME。尝试使用此cp命令:

cp -L "$FILE $DIR/"