#!/bin/bash
#gedit tidy plugin
init=false
SRC_DIR=~/repos
DIRECTORY="Gedit-Clientside-Plugin"
#making repos directory
if [ ! -d "$SRC_DIR" ]; then mkdir $SRC_DIR; fi
if [ ! -d "$SRC_DIR/$DIRECTORY" ]; then
init=true
cd $SRC_DIR && pwd && git clone git://github.com/trentrichardson/Gedit-Clientside-Plugin.git && cd $DIRECTORY
else
cd $SRC_DIR/$DIRECTORY
fi
#below here is what I'm having trouble with
git pull 1>&1 | grep "Already up-to-date."
if [[ ! $? -eq 0 && ! $init ]]; then
read -e -p "## Branch moved, build and install Gedit-Clientside-Plugin? [Y/n] " yn
if [[ $yn == "y" || $yn == "Y" || $yn == "" ]] ; then
if [ ! -d "/usr/share/gedit/plugins/clientside" ]; then
sudo cp ~/repos/Gedit-Clientside-Plugin/clientside /usr/share/gedit/plugins/ -r
else
echo "Directory already exists."
fi
fi
fi
Powyższy kod jest czymś, co edytowałem ze skryptu, który znalazłem na stackoverflow, aby zainstalować Emacsa z repozytorium git. Chcę, aby ten skrypt instalował dowolne programy z repozytoriów git i aktualizował je, jeśli konieczna jest aktualizacja. Oczywiście będę musiał podać kroki, aby go zainstalować. W przypadku tego skryptu wystarczy skopiować katalog clientside
do katalogu /usr/share/gedit/plugins/
.Jak napisać skrypt powłoki, który sprawdza, czy repozytorium git jest aktualne?
Nie potrzebuję pomocy w instalacji jakiegokolwiek skryptu, ale potrzebuję go, aby sprawdzić, czy repozytorium jest aktualne i przejść z tego miejsca.
Teraz co nie rozumiem jest to część:
git pull 1>&1 | grep "Already up-to-date."
if [[ ! $? -eq 0 && ! $init ]]; then
.....
fi
Kiedy biegnę git pull 1>&1 | grep "Already up-to-date." && $?
w terminalu wyjście jest Already up-to-date. 0
. Rozumiem, że jest to część, która sprawdza dostępność aktualizacji, jednak kolejna część nie jest wykonywana (instrukcja if) - która jest częścią, która kopiuje katalog do katalogu wtyczki gedit. Nie rozumiem, co znaczy 1>$1
lub co oznacza. Dlatego nie mogłem rozwiązać problemu ... I nie rozumiem, dlaczego uważa, że Branch is moved
, gdy nie jest on aktualny (po prostu zakładam, że mówi, że gdy git pull
nie zwraca 0
w instrukcji if).
Jestem pewien, że ma proste rozwiązanie, a odpowiedź będzie zarówno edukacją dla basha, jak i gita. Doceniam wszelką pomoc.
Używam ubuntu 12.04.
'1> & 1' jest dziwne, nie mam pojęcia; przekierowuje stdout na stdout. Zwykle widać to w formularzu '2> & 1', który przekierowuje stderr (2) na standardowe wyjście (1). '$?' jest ostatnim kodem wyjścia; będzie "0", jeśli "grep" pasuje do czegoś, bez "0", jeśli nie pasuje (lub wystąpił inny błąd, np. dostęp do nieistniejącego pliku). – Amadan
Zgaduję więc, że '1> i 1' jest całkowicie bezcelowe ... nie zrobiłoby różnicy, gdyby było tam, czy nie. – Logan