Ambayo ni bora: kutumia; au &&& kutekeleza amri nyingi kwenye safu moja?


Nenda kwa jibu lililokubaliwa


Katika mafunzo na jinsi ya-mimi mara nyingi naona amri zimejumuishwa. Kwa mfano,

 sudo apt-get update && sudo apt-get install pyrenamer
 

Kuna inaonekana kuwa vinne viungio: & , && , || na ; . Ingawa & kontakt ni wazi kwangu (hutuma mchakato kwa nyuma na kuacha terminal inapatikana), haijulikani ni tofauti gani kati ya && na ; . Na sikujua || hadi maoni ya Kaya.

Maswali yafuatayo yanahusu tofauti kati ya viunganisho viwili, lakini fanya hivyo zaidi katika maoni:

Kwa hivyo hapa kuna idadi ya maswali yanayohusiana:

  1. Kuna tofauti gani kati ya ; na && ?
  2. Unapaswa kuitumia lini mtawaliwa? Itakuwa vizuri kuona kesi za utumiaji: ikiwa ninataka kutumia amri na kisha baada ya kuzima kompyuta yangu, ni kipi kiunganisho kipi ninapaswa kuchagua?
  3. Faida na hatari zao ni nini ? Robie Basak anataja kwenye maoni kwa jibu hili kwamba amri kama cd /somewhere_else; rm -Rf * inaweza kuwa na athari za uharibifu ikiwa sehemu ya kwanza kwenye safu ya amri itashindikana, kwa mfano.
  4. Ikiwa inafaa, inatoka wapi?

450





2013-08-20




Idadi ya majibu: 5


Cheatsheet:

 A; B    # Run A and then B, regardless of success of A
A && B  # Run B if and only if A succeeded
A || B  # Run B if and only if A failed
A &     # Run A in background.
 

809


2014-10-20

&& huendesha tu amri ya pili ikiwa ya kwanza iliyokuwa na hali 0 (ilifanikiwa). ; inaendesha amri zote mbili, hata ikiwa ya kwanza inatoka na hali isiyo ya sifuri.

Mfano wako na && unaweza kugawanywa sawa na

 if sudo apt-get update ; then
    sudo apt-get install pyrenamer
fi
 

77


2013-08-20

Kutumia ; kutekeleza amri bila kujali kama amri ya kwanza imefanikiwa au la.

kutumia && kutekeleza amri ya 2 wakati amri ya kwanza imetekelezwa kwa mafanikio (hali 0).

Wote hutumiwa kwa mtazamo tofauti. Kama kwa mchakato mrefu, sema kwa usakinishaji unahitaji kutunga na kuisakinisha. unapaswa make && make install . Kwa hivyo kusanidi kutaendesha tu ikiwa make kufanikiwa.

Kwa hivyo kwa maagizo tegemezi unapaswa kutumia &&

Kuandika bash, au amri na matumizi ya amri huru ;

Kwa hivyo ikiwa unataka kuzima kompyuta hata kazi ya kwanza ilishindwa kutumia ; , lakini ikiwa unataka mafanikio kamili ya kazi ya kwanza anzilisha utumiaji &&


32


2013-08-20

a ; b itaendesha b bila kujali hali ya kutoka kwa a. a && b itaendesha b ikiwa tu imefaulu.

Hii ni muhimu na ya kutosha kujibu maswali 3 ya kwanza. Hasa, 2 ni pana sana, na haiwezi kupewa jibu dhahiri "moja" - bet yako bora ni kuamua juu ya kesi kwa msingi wa kesi.

Kama ilivyo kwa swali la 4: Wao ni Bash syntax .

Hakuna hatari ya ndani ya kutumia ama. Tena, ufafanuzi hapo juu ni wa kutosha. Inamaanisha kuwa utaandika && wakati b una athari zisizotarajiwa ikiwa a haitafaulu. Hakuna haja ya sheria zaidi au maelezo, IMHO.


15


2013-08-20

A; B # Run A na kisha B, bila kujali mafanikio ya A

A && B # Run B ikiwa na ikiwa tu imefaulu

A || B # Run B ikiwa na ikiwa tu Imeshindwa

A & # Run A kwa nyuma.

Utawala mzuri sana wa kidole. Ningeongeza kuwa katika hali zingine, kwa kutumia maagizo haya kwa njia ndogo husababisha tunapotaka kuzichukulia kama kitengo kimoja au hatutaki kuangazia baadhi ya matokeo ya shughuli na ganda la sasa.

Mifano:

- Shirikisha utoaji wa amri mbili:

 (ls foo; ls bar) > single-result.txt
 

Kuingia kwenye saraka na kutekeleza amri kutoka hapo wakati sio kubadilisha saraka ya sasa ya ganda:

 (cd target-directory && jar -xf ../my-jar)
 

2


2019-09-26