Как и многие другие, я хочу создать репо, чтобы хранить мои настройки точечного файла. Вместо того, чтобы делать ln -s
вручную, я использую следующий скрипт для настройки.Symbian dotfiles со сценарием
#!/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
ничего не сообщает. Что я здесь забыл?
ОБНОВЛЕНИЕ: Сделано другим пробегом при этом - минус 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'? другая сторона примечания: почему вы используете так много конечных полуколонок? –