Příkazy můžete oddělit středníkem:
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
To jsi myslel?
Pokud chcete provést každý příkaz pouze v případě, že předchozí byl úspěšný, zkombinujte je pomocí &&
operátor:
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Pokud některý z příkazů selže, nebudou provedeny všechny další příkazy, které za ním následují.
Pokud chcete provést všechny příkazy bez ohledu na to, zda předchozí selhaly nebo ne, oddělte je středníkem:
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Ve vašem případě si myslím, že chcete první případ, kdy provedení dalšího příkazu závisí na úspěchu předchozího.
Můžete také vložit všechny příkazy do skriptu a místo toho jej spustit:
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Zpětná lomítka na konci řádku brání shellu, aby si myslel, že další řádek je nový příkaz; pokud vynecháte zpětná lomítka, budete muset napsat celý příkaz na jeden řádek.
Pohodlnější způsob ve srovnání s používáním zpětných lomítek a &&
všude je instruovat shell, aby ukončil skript, pokud některý z příkazů selže. To provedete pomocí set
vestavěná funkce s -e
argument. Díky tomu můžete napsat skript mnohem přirozenějším způsobem:
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Uložte to do souboru, například myscript
a udělejte jej spustitelným:
chmod +x myscript
Nyní můžete tento skript spustit jako jiné programy na počítači. Ale pokud jej neumístíte do adresáře uvedeného ve vašem PATH
proměnná prostředí (například /usr/local/bin
nebo na některých distribucích Linuxu ~/bin
), pak budete muset zadat cestu k tomuto skriptu. Pokud je v aktuálním adresáři, spustíte jej pomocí:
./myscript
Příkazy ve skriptu fungují stejně jako příkazy v prvním příkladu; další příkaz se provede pouze v případě, že předchozí byl úspěšný. Pro bezpodmínečné provedení všech příkazů jednoduše nevolejte set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Zjistil jsem, že pomocí; oddělování příkazů funguje pouze v popředí. např. :
cmd1; cmd2; cmd3 &
- provede pouze cmd3
na pozadí, zatímco cmd1 && cmd2 && cmd3 &
- spustí celý řetězec na pozadí, POKUD nedojde k žádným chybám.
Aby bylo zajištěno bezpodmínečné provedení, použití závorek řeší toto:
(cmd1; cmd2; cmd3) &
- provede řetězec příkazů na pozadí, i když některý krok selže.
Chcete-li je spustit všechny najednou, můžete použít klíč potrubí "|" takhle:
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install