|
|
|
@ -1,7 +1,7 @@
@@ -1,7 +1,7 @@
|
|
|
|
|
#!/bin/bash |
|
|
|
|
#!/usr/bin/env bash |
|
|
|
|
|
|
|
|
|
#Создан: Пт 23 авг 2013 19:57:29 |
|
|
|
|
#Изменён: Чт 05 авг 2021 17:11:33 |
|
|
|
|
#Изменён: вт 02 ноя 2021 12:40:46 |
|
|
|
|
|
|
|
|
|
# |
|
|
|
|
# (c) 2013, Maxim Lihachev, <envrm@yandex.ru> |
|
|
|
@ -28,8 +28,10 @@
@@ -28,8 +28,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Директория для установки |
|
|
|
|
PLATFORM="$(uname -s | tr 'A-Z' 'a-z')" |
|
|
|
|
HOSTFILE="${PLATFORM}.${HOSTNAME%%.*}" |
|
|
|
|
RCDIR=$(pwd) |
|
|
|
|
RCLIST=$RCDIR/rc.$OSTYPE |
|
|
|
|
RCLIST="${RCDIR}/rc.${HOSTFILE}" |
|
|
|
|
|
|
|
|
|
ROOTDIR=$HOME |
|
|
|
|
|
|
|
|
@ -43,7 +45,7 @@ white="\033[1;1m"
@@ -43,7 +45,7 @@ white="\033[1;1m"
|
|
|
|
|
#Вывод [цветного] сообщения с заполнением строки до 30 колонки знаком "." |
|
|
|
|
# msg1 msg2 ?color? |
|
|
|
|
report() { |
|
|
|
|
len=$((30 - $(echo -e -n $2 | wc -m))) |
|
|
|
|
len=$((30 - $(echo -e -n "$2" | wc -m))) |
|
|
|
|
|
|
|
|
|
echo -e -n " ${3:-$rstc} $1 $2 $rstc" |
|
|
|
|
eval printf "%-.s-" {1..$len} |
|
|
|
@ -52,9 +54,9 @@ report() {
@@ -52,9 +54,9 @@ report() {
|
|
|
|
|
#Проверка доступности файла настроек |
|
|
|
|
# file |
|
|
|
|
check() { |
|
|
|
|
report Поиск $(basename $1) |
|
|
|
|
report Поиск "$(basename "$1")" |
|
|
|
|
|
|
|
|
|
if [ -a $RCDIR/$1 ]; then |
|
|
|
|
if [ -a "$RCDIR/$1" ]; then |
|
|
|
|
echo OK |
|
|
|
|
else |
|
|
|
|
echo -e "$red ФАЙЛ НАСТРОЕК НЕ СУЩЕСТВУЕТ: $RCDIR/$1 $rstc" >&2 |
|
|
|
@ -64,10 +66,10 @@ check() {
@@ -64,10 +66,10 @@ check() {
|
|
|
|
|
#Резервирование файла |
|
|
|
|
# file |
|
|
|
|
backup() { |
|
|
|
|
report Сохранение $(basename $filename) $yellow |
|
|
|
|
report Сохранение "$(basename "$filename") $yellow" |
|
|
|
|
|
|
|
|
|
date=$(\date "+%Y.%m.%d_%H.%M") |
|
|
|
|
\mv "$link"{,.$date} && \ |
|
|
|
|
\mv "$link"{,."$date"} && \ |
|
|
|
|
echo -e "${green}Резервная копия: $link.$date ${rstc}" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -81,10 +83,10 @@ backup() {
@@ -81,10 +83,10 @@ backup() {
|
|
|
|
|
# |
|
|
|
|
# file |
|
|
|
|
dotfile() { |
|
|
|
|
if [[ "$(dirname $1)" == $ROOTDIR ]]; then |
|
|
|
|
echo "$(dirname $1)/.$(basename $1)" |
|
|
|
|
if [[ "$(dirname "$1")" == "$ROOTDIR" ]]; then |
|
|
|
|
echo "$(dirname "$1")/.$(basename "$1")" |
|
|
|
|
else |
|
|
|
|
echo $1 |
|
|
|
|
echo "$1" |
|
|
|
|
fi |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -95,19 +97,19 @@ mklink() {
@@ -95,19 +97,19 @@ mklink() {
|
|
|
|
|
DST=$2 |
|
|
|
|
|
|
|
|
|
#Файл существует? |
|
|
|
|
if [ -a $RCDIR/$SRC ]; then |
|
|
|
|
filename=$(basename $SRC) |
|
|
|
|
if [ -a "$RCDIR/$SRC" ]; then |
|
|
|
|
filename=$(basename "$SRC") |
|
|
|
|
|
|
|
|
|
report Установка $filename |
|
|
|
|
report Установка "$filename" |
|
|
|
|
|
|
|
|
|
link=$(dotfile "$DST/${filename//\.$(uname -i)}") |
|
|
|
|
link=$(dotfile "$DST/${filename//\.${HOSTFILE}}") |
|
|
|
|
|
|
|
|
|
#Файл существует? |
|
|
|
|
if [ -a $link ]; then |
|
|
|
|
if [ -a "$link" ]; then |
|
|
|
|
#Файл -- ссылка? |
|
|
|
|
if [ -L $link ]; then |
|
|
|
|
ref=$(readlink $link) |
|
|
|
|
if [ $ref == $RCDIR/$SRC ]; then |
|
|
|
|
if [ -L "$link" ]; then |
|
|
|
|
ref=$(readlink "$link") |
|
|
|
|
if [ "$ref" == "$RCDIR/$SRC" ]; then |
|
|
|
|
echo -e "Установка не требуется" |
|
|
|
|
return |
|
|
|
|
else |
|
|
|
@ -117,11 +119,11 @@ mklink() {
@@ -117,11 +119,11 @@ mklink() {
|
|
|
|
|
echo -e "$redНайден конфигурационный файл$rstc" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
backup $link && \ |
|
|
|
|
mklink $SRC $DST |
|
|
|
|
backup "$link" && \ |
|
|
|
|
mklink "$SRC" "$DST" |
|
|
|
|
else |
|
|
|
|
#Ссылка на файл-источник |
|
|
|
|
ln -s $RCDIR/$SRC $(dotfile $DST/${filename//\.$(uname -i)}) 2>&- && \ |
|
|
|
|
ln -s "$RCDIR/$SRC" "$(dotfile "$DST/${filename//\.${HOSTFILE}}")" 2>&- && \ |
|
|
|
|
echo -e "${green}OK${rstc}" |
|
|
|
|
fi |
|
|
|
|
else |
|
|
|
@ -132,11 +134,11 @@ mklink() {
@@ -132,11 +134,11 @@ mklink() {
|
|
|
|
|
#Удаление ссылки на файл |
|
|
|
|
# sourcefile link |
|
|
|
|
rmlink() { |
|
|
|
|
FILE=$(basename $1) |
|
|
|
|
LINK=$(dotfile $2/${FILE//\.$(uname -i)}) |
|
|
|
|
FILE=$(basename "$1") |
|
|
|
|
LINK=$(dotfile "$2/${FILE//\.${HOSTFILE}}") |
|
|
|
|
|
|
|
|
|
if [[ ( -a $LINK ) && (-L $LINK)]]; then |
|
|
|
|
report Удаление $FILE $red |
|
|
|
|
report Удаление "$FILE" "$red" |
|
|
|
|
|
|
|
|
|
\rm "$LINK" && echo -e "${green}OK${rstc}" || echo -e "Ошибка удаления" |
|
|
|
|
fi |
|
|
|
@ -144,7 +146,7 @@ rmlink() {
@@ -144,7 +146,7 @@ rmlink() {
|
|
|
|
|
|
|
|
|
|
#Установка настроек |
|
|
|
|
installrc() { |
|
|
|
|
while read line; do |
|
|
|
|
while read -r line; do |
|
|
|
|
if [[ "$line" =~ ^\s*\+\s*.*$ ]]; then |
|
|
|
|
#Установить файл |
|
|
|
|
eval $(echo -e "$line" | sed 's/^+/mklink /') |
|
|
|
@ -156,9 +158,9 @@ installrc() {
@@ -156,9 +158,9 @@ installrc() {
|
|
|
|
|
echo -e "${white}$line${rstc}" | tr '#' ' ' |
|
|
|
|
else |
|
|
|
|
#Выполнение строки |
|
|
|
|
eval $line |
|
|
|
|
eval "$line" |
|
|
|
|
fi |
|
|
|
|
done < $1 |
|
|
|
|
done < "$1" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#Разбор аргументов командной строки и выполнение скрипта |
|
|
|
@ -169,5 +171,5 @@ case "$1" in
@@ -169,5 +171,5 @@ case "$1" in
|
|
|
|
|
*) : ;; |
|
|
|
|
esac |
|
|
|
|
|
|
|
|
|
installrc $RCLIST |
|
|
|
|
installrc "$RCLIST" |
|
|
|
|
|
|
|
|
|