Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3115: Jak v příkazové řádce spustit více příkazů než jeden

Příkazovou řádku znáte. Ve Windows je CMD (a nově PowerShell), v Linuxu/Macu je to terminál zpřístupňující shell, v různých provedeních (bash, zsh, atd). Je velmi snadné tam prostě spustit jeden příkaz, ale co když jedním zadáním chcete spustit víc?

Windows (CMD)

Spuštění více příkazů za sebou bez ohledu na výsledek (&):

příkaz1 & příkaz2 & příkaz3 … 

Postupně spoustí první, následně druhý, třetí, atd.

Spuštění dalšího příkazu jen při úspěchu předchozího (&&):

příkaz1 && příkaz2 && příkaz3 … 

Spuštění dalšího příkazu jen při chybě předchozího (||):

příkaz 1 || příkaz 2

Tady se příkaz 2 spustí pouze pokud příkaz1 skončí chybou.

TIP: Co to znamená CLI? a pro připomenutí je vhodné i Co je to ten DOS? A příkazová řádka?

PŘÍKLAD: CMD (Windows) – záloha složky + hláška, jestli to vyšlo

robocopy C:\Data D:\Zalohy\Data /MIR && echo ZALOHA OK || echo ZALOHA SELHALA

Windows (PowerShell)

V PowerShellu fungují zvyklosti jako dále v Linux a podporováno je

  • řetězení – ;
  • spustit další jen při úspěchu předchozího – &&
  • spustit další při neúspěchu předchozího – ||

Aby zmatku nebylo málo, starší PowerShell (5.1) používal $? a if, konkrétně takto:

if ($?) { Command2 } else { Command3 }

PŘÍKLAD: PowerShell – spusť backup skript, jen když existuje, jinak hláška

Test-Path C:\skripty\backup.ps1 && & C:\skripty\backup.ps1 || Write-Host "Backup skript nenalezen nebo selhal"

TIP: K čemu je ve Windows PowerShell a kde ho tam najdu?

Linux/Mac OS (bash, zsh, sh – terminál)

Spuštění více příkazů za sebou (nezávisle na výsledku): 

příkaz1; příkaz2; příkaz2

Background (& – běží na pozadí)

příkaz1 & příkaz2

Zde se příkaz1 spustí na pozadí a okamžitě také spustí příkaz2. 

Spuštění dalšího příkazu jen při úspěchu předchozího (&&)

příkaz1 && příkaz2

Spuštění dalšího příkazu jen při chybě předchozího (||)

příkaz1 ||  příkaz2

POZNÁMKA: Můžete kombinovat. 

příkaz1 && oříkaz2 || příkaz3

tj. zkus 1, když uspěje, udělej 2, jinak 3

Jde používat i složené závorky pro seskupování příkazů, takže například:

{ příkaz1; příkaz2; } || echo "Něco se pokazilo"

PŘÍKLAD: Bash (Linux/macOS) – bezpečná úprava configu + reload služby

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak  &&
 nano /etc/nginx/nginx.conf && sudo systemctl reload nginx

POZNÁMKA: V příkazové řádce funguje i roura/pipe (|) pro předání výstupu z jednoho programu do vstupu druhého a “<” a “>” pro vstup a výstup.