다른 많은 사람들처럼 도트 파일 사용자 정의를 저장하기위한 저장소를 만들고 싶습니다. ln -s
을 수동으로 수행하는 대신 다음 스크립트를 사용하여 설정합니다. 스크립트가있는 symlink 도트 파일
내가 내 길을 생각 :이 프로그램을 실행할 때이 .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
요구는 어떤 미친 이유에 대한 디렉토리가 될 것을 결심한다.
왜 그 모든 후행 백 슬래시가 필요하다고 생각합니까 ??? 그것을 제거하면, 그들이 무엇을 사용해야하는지 당신은 모른다. 부가 메모 : 왜'makeFiles','unset' 및'makeLinks' 변수를 해제하고 있습니까? 또 다른 측면 노트 : 왜 그렇게 많은 후행 세미콜론을 사용합니까? –