#!/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
Il codice precedente è qualcosa che ho modificato da uno script che ho trovato su stackoverflow per installare Emacs dal repository git. Quello che voglio che questo script faccia è installare qualsiasi programma da repository git e aggiornarli se è necessario un aggiornamento. Ovviamente dovrò fornire i passaggi per installarlo. Nel caso di questo script, è sufficiente copiare la directory clientside
nella directory /usr/share/gedit/plugins/
.Come scrivere uno script di shell che controlla se il repository git è aggiornato?
Non ho bisogno di aiuto su come installare qualsiasi script ma quello di cui ho bisogno è come verificare se il repository è aggiornato e passare da lì.
In questo momento quello che non capisco è questa parte:
git pull 1>&1 | grep "Already up-to-date."
if [[ ! $? -eq 0 && ! $init ]]; then
.....
fi
Quando eseguo git pull 1>&1 | grep "Already up-to-date." && $?
nel terminale di uscita è Already up-to-date. 0
. Quindi capisco che questa è la parte che controlla gli aggiornamenti, tuttavia la parte successiva non viene eseguita (l'istruzione if) - che è la parte che copia la directory nella directory del plugin gedit. Non capisco cosa significa 1>$1
o cosa significa $?
. Quindi non ho potuto risolvere il problema ... E quello che non capisco è il motivo per cui pensa che sia Branch is moved
quando non è aggiornato (sto solo supponendo che dice che quando git pull
non restituisce 0
nella dichiarazione if).
Sono sicuro che ha una soluzione semplice e la risposta sarà sia educare per bash e git. Apprezzo tutto l'aiuto.
Sto usando Ubuntu 12.04.
'1> & 1' è strano, non ne ho idea; reindirizza lo stdout allo stdout. Di solito lo si vede nel formato '2> & 1', che reindirizza stderr (2) in stdout (1). '$?' è l'ultimo codice di uscita; sarà '0' se' grep' corrisponde a qualcosa, non '' 0' se non riesce a corrispondere (o ha riscontrato un altro errore, come l'accesso al file inesistente). – Amadan
Quindi immagino che '1> & 1' sia totalmente inutile ... non farebbe differenza se fosse lì o no. – Logan