2016-09-09 3 views
0

다른 많은 사람들처럼 도트 파일 사용자 정의를 저장하기위한 저장소를 만들고 싶습니다. ln -s을 수동으로 수행하는 대신 다음 스크립트를 사용하여 설정합니다. enter image description here스크립트가있는 symlink 도트 파일

enter image description here

내가 내 길을 생각 :이 프로그램을 실행할 때이 .bash_profile 경우가 분명히있는이 아니라고 생각하기 때문에

#!/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 실패 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

왜 그 모든 후행 백 슬래시가 필요하다고 생각합니까 ??? 그것을 제거하면, 그들이 무엇을 사용해야하는지 당신은 모른다. 부가 메모 : 왜'makeFiles','unset' 및'makeLinks' 변수를 해제하고 있습니까? 또 다른 측면 노트 : 왜 그렇게 많은 후행 세미콜론을 사용합니까? –

답변

0

도트 파일의 경로를 잘못 작성하고 있습니다. $FILE에 이미 도트 파일의 전체 경로가 포함되어 있으므로 $HOME을 다시 앞에 붙일 필요가 없습니다. 이 cp 명령으로 시도하십시오 :

cp -L "$FILE $DIR/"