GNU/Linux >> Znalost Linux >  >> Linux

Proveďte kombinaci více příkazů Linuxu na jednom řádku

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

Linux
  1. Linux Základy příkazového řádku – Spouštění příkazů z příkazového řádku

  2. odesílání pošty z linuxového terminálu v jednom řádku

  3. Získejte N'-tý řádek více souborů v linuxu

  1. Odesílejte příkazy do více relací SSH pomocí Terminátora

  2. Příkazy systému Linux pro zobrazení informací o vašem hardwaru

  3. Kombinujte více unixových příkazů do jednoho výstupu

  1. Jak nainstalovat více distribucí Linuxu na jedno USB

  2. Vykonat řadu příkazů jedním sudem?

  3. Výuka Unix Sed:Jak provádět více příkazů Sed