首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有脚本的Symlink dotfiles

带有脚本的Symlink dotfiles
EN

Stack Overflow用户
提问于 2016-09-09 03:12:51
回答 1查看 1.4K关注 0票数 0

正如许多其他人所做的那样,我希望创建一个回购来存储我的dotfile自定义。我没有手动执行ln -s,而是使用下面的脚本来设置内容。

代码语言:javascript
复制
#!/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不存在,这显然不是这样的:

我认为我的文件路径可能是不正确的,尽管shellcheck没有任何报告。我忘了什么?

UPDATE:在此再次运行--减去cp。我仍然不确定的一件事是exit的使用,特别是因为我已经在使用-e检查错误。

Shellcheck和bash -n返回0。

代码语言:javascript
复制
#!/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需要成为一个目录。

EN

回答 1

Stack Overflow用户

发布于 2016-09-09 03:40:29

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

代码语言:javascript
复制
cp -L "$FILE $DIR/"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39403255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档