Skrypty
O ile interakcja z Hugo
nie jest zbyt trudna, to tworzenie ścieżek do wpisów i zdjęć na bazie /rok/miesiąc
staje się mozolne.
Czemu by tego nie uprościć?
#!/bin/bash
DIR=''
WH=''
DATE=$(date +%Y)/$(date +%m)
OPTIND=''
OPTARG=''
print_help() {
printf "\e[1;31mHugo managing script.\e[0m
\e[1;33mPass basic directory:\e[0m
a - arduino
o - onyxcherry
r - robot
\e[1;33mPass location:\e[0m
i - static/img
p - content/posts
\e[1;96mPass -n with name
to create a post\e[0m
"
}
while getopts 'aion:pr' flag; do
case "${flag}" in
a) DIR='arduino.wisniewski.app' ;;
i) WH='static/img' ;;
n) POST_NAME=${OPTARG} ;;
p) WH='content/posts' ;;
o) DIR='wisniewski.app' ;;
r) DIR='robot.wisniewski.app' ;;
*) print_help
return 0 ;;
esac
done
if [[ -n $POST_NAME ]] && [[ -z $WH ]] && [[ -z $DIR ]]; then
hugo new posts/${DATE}/${POST_NAME}
fi
if [[ -n $WH ]] && [[ -n $DIR ]] ; then
cd /home/tomasz/${DIR}/${WH}/${DATE}/
elif [[ -z $WH ]] && [[ -n $DIR ]];then
cd /home/tomasz/${DIR}/
elif [[ -z $POST_NAME ]];then
print_help
fi
Tutaj warto zaznaczyć, że używanie cd
w takich skryptach może nie przynosić rezultatów z uwagi na specyfikę działania. Uruchomienie skryptu stworzy nowego basha
, tam wykona cd
i wyjdzie z nowego basha
. Efekt? Brak!
Rozwiązaniem jest wykonywanie . moj_skrypt.sh
, co wykona to w aktualnym bashu. Dobrze stworzyć do tego prosty alias
.
Ważne jest także ustawienie
OPTIND
iOPTARG
na pustego stringa. Inaczej przekazywanie parametrów względem kolejnych wywołań skryptu może nas zdziwić.
Korzystam też z dłuższego skryptu rsync
owego do wymiany plików między serwerami. Wymaga to ode mnie podania tylko niezbędnych parametrów (nazwa pliku i nazwa użytkownika docelowego), reszta ustala się sama.