&
provede příkaz na pozadí a vrátí 0 bez ohledu na jeho stav.
Z manuálové stránky:
Pokud je příkaz ukončen řídicím operátorem &, shell provede příkaz na pozadí v dílčím shellu. Shell nečeká na dokončení příkazu a návratový stav je 0. Příkazy oddělené; jsou prováděny postupně; shell čeká na ukončení každého příkazu v pořadí. Návratový stav je stav ukončení posledního provedeného příkazu.
Podívejte se, jaké jsou vaše příkazy:
test -x examples.desktop && echo $?
To znamená zkontrolovat, zda examples.desktop
je spustitelný a pokud je, spusťte echo $?
.
test -x examples.desktop & echo $?
znamená zkontrolovat, zda examples.desktop
je spustitelný na "pozadí". Poté spusťte echo $?
.
Význam &&
a &
jsou bytostně odlišné.
- Co je
&&
v Bash? V Bash – a mnoha dalších programovacích jazycích –&&
znamená „A“. A v kontextu provádění příkazů, jako je tento, to znamená položky nalevo i napravo od&&
by v tomto případě měly být spuštěny postupně. - Co je
&
v Bash? A jeden&
znamená, že předchozí příkazy – bezprostředně vlevo od&
—by měl být jednoduše spuštěn na pozadí.
Takže když se podíváme na váš příklad:
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
První příkaz – jak je strukturován – ve skutečnosti nic nevrací. Ale druhý příkaz vrátí [1] 2992
ve kterém 2992
odkazuje na ID procesu (PID), který běží na pozadí, a 0
je výstupem prvního příkazu.
Protože druhý příkaz právě běží test -x examples.desktop
na pozadí se to děje docela rychle, takže ID procesu se vytvoří a zmizí docela okamžitě.