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 i OPTARG na pustego stringa. Inaczej przekazywanie parametrów względem kolejnych wywołań skryptu może nas zdziwić.

Korzystam też z dłuższego skryptu rsyncowego 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.

Podobne skrypty publikuję w repozytorium na GitHubie, by móc z nich szybko skorzystać na nowym serwerze.


Masz jakieś ciekawe narzędzia/aliasy? Napisz do mnie maila!