2016-09-09 3 views
0

Как и многие другие, я хочу создать репо, чтобы хранить мои настройки точечного файла. Вместо того, чтобы делать 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 не существует, что, очевидно, не так:

enter image description here

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 должен быть каталог по какой-то сумасшедшей причине.

+0

Почему, по-вашему, вам нужны все эти задние обратные косые черты ??? удалите их, кажется, вы не представляете, для чего их следует использовать. В качестве побочного примечания: почему вы отключите переменные 'makeFiles',' unset' и 'makeLinks'? другая сторона примечания: почему вы используете так много конечных полуколонок? –

ответ

0

Вы неправильно строите путь к dotfile - $FILE уже содержит полный путь к файлу dotfile, и нет необходимости снова добавлять $HOME. Попробуйте с этим cp команда:

cp -L "$FILE $DIR/"