Vraag Is er een verschil tussen hoe twee ampersands en een puntkomma werken in bash?


Als ik twee afzonderlijke opdrachten op één regel wilde uitvoeren, zou ik dit kunnen doen:

cd /home; ls -al

of dit:

cd /home && ls -al

En ik krijg dezelfde resultaten. Wat gebeurt er echter op de achtergrond met deze twee methoden? Wat is het functionele verschil tussen hen?


66
2018-03-24 20:51


oorsprong




antwoorden:


De ; scheidt gewoon de ene opdracht van de andere. De && zegt alleen de volgende opdracht uit te voeren als de vorige succesvol was

cd /home; ls -al

Dit zal cd /home en zelfs als het cd opdracht mislukt (/home bestaat niet, je hebt geen toestemming om het te doorkruisen, etc.), het zal worden uitgevoerd ls -al.

cd /home && ls -al

Hiermee wordt alleen het ls -al als het cd /home was succesvol.


84
2018-03-24 20:58



gebruik van ;  is echt een gevaarlijke (tenminste met rm commando), bijvoorbeeld cd /some/dir; rm -fr ./*. Dus met zo'n destructieve operatie moet je er zeker van zijn dat je op de juiste plaats bent voordat je het uitvoert. De juiste opdracht is cd /some/dir && rm -fr ./* - ALex_hha


a && b

als een retourneert daarom de nuluitgangscode b is geëxecuteerd.

a || b

als een geeft vervolgens de niet-nul-exitcode terug b is geëxecuteerd.

a ; b

een wordt uitgevoerd en vervolgens b is geëxecuteerd.


68
2018-03-26 01:50





cd /fakedir; ls -al

runs ls in de huidige map omdat cd /fakedir zal falen en de shell negeert de exit-status die niet nul is.

cd /fakedir && ls -al

Omdat het && operator zal alleen doorgaan als het vorige commando normaal werd verlaten (status van nul), nee ls operatie zal worden uitgevoerd.

Er zijn andere operatoren, zoals & welke achtergrond een proces zal zijn. Hoewel het vaak aan het einde van een opdracht wordt geplaatst, kan het in het midden van een ketting worden geplaatst.


15
2018-03-24 21:00





Je kunt ook met hen meedoen zoals een if..then..else voor het koppelen van opdrachtlogica.

voorbeeld:

ls file.ext && echo "file exists" || echo "file does not exist"

3
2018-03-08 08:32