Puoi separare i tuoi comandi usando un punto e virgola:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
Era questo che intendevi?
Se vuoi eseguire ogni comando solo se il precedente ha avuto successo, combinali usando &&
operatore:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Se uno dei comandi fallisce, tutti gli altri comandi successivi non verranno eseguiti.
Se vuoi eseguire tutti i comandi indipendentemente dal fatto che i precedenti siano falliti o meno, separali con il punto e virgola:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Nel tuo caso, penso che tu voglia il primo caso in cui l'esecuzione del comando successivo dipende dal successo del comando precedente.
Puoi anche inserire tutti i comandi in uno script ed eseguirlo invece:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Le barre rovesciate alla fine della riga servono a impedire alla shell di pensare che la riga successiva sia un nuovo comando; se ometti le barre rovesciate, dovresti scrivere l'intero comando in una sola riga.
Un modo più conveniente rispetto all'uso di barre rovesciate e &&
ovunque serve a istruire la shell a uscire dallo script se uno qualsiasi dei comandi fallisce. Lo fai usando il set
funzione integrata con -e
discussione. Con questo, puoi scrivere una sceneggiatura in un modo molto più naturale:
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Salvalo in un file, ad esempio myscript
e rendilo eseguibile:
chmod +x myscript
Ora puoi eseguire quello script come altri programmi sulla macchina. Ma se non lo metti all'interno di una directory elencata nel tuo PATH
variabile di ambiente (ad esempio /usr/local/bin
, o su alcune distribuzioni Linux ~/bin
), sarà necessario specificare il percorso di quello script. Se è nella directory corrente, eseguilo con:
./myscript
I comandi nello script funzionano allo stesso modo dei comandi nel primo esempio; il comando successivo viene eseguito solo se il precedente ha avuto successo. Per l'esecuzione incondizionata di tutti i comandi, semplicemente non chiamare set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Ho scoperto che usando; separare i comandi funziona solo in primo piano. es :
cmd1; cmd2; cmd3 &
- eseguirà solo cmd3
in background, mentrecmd1 && cmd2 && cmd3 &
- eseguirà l'intera catena in background SE non ci sono errori.
Per soddisfare l'esecuzione incondizionata, l'uso delle parentesi risolve questo :
(cmd1; cmd2; cmd3) &
- eseguirà la catena di comandi in background, anche se qualche passo fallisce.
Per eseguirli tutti in una volta, puoi utilizzare il tasto della riga della pipeline "|" in questo modo:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install