30Jul

Kad labāk ir #!/bin/ bash vietā #!/bin/ sh Shell Script?

Ja izveidojat jaunu čaulas skriptu, jūs vēlaties, lai tas būtu pēc iespējas bez problēmām, bet dažreiz tas var būt nedaudz mulsinošs, lai uzzinātu, kura shebang ir labākā, ko jūs varat izmantot.Ņemot to vērā, šodienas SuperUser Q & amai ir atbilde uz sajaukt lasītāja jautājumu.

Šodienas jautājums &Atbildes sesija mums priecājas par SuperUser - Stack Exchange, kas ir kopienas un Q & A tīmekļa vietņu grupa.

Jautājums

SuperUser lasītājs Hendre vēlas uzzināt, kad ir labāk izmantot #!/bin/ bash vietā #!/bin/ sh čaulas skriptos:

Kad ir lietderīgāk izmantot #!/bin/ bash nevis #!/bin/ sh čaulas skriptā?

Kad ir labāk izmantot #!/bin/ bash vietā #!/bin/ sh ar čaulas skriptu?

Atbilde

SuperUser atbildētājam gravitātei mums ir atbilde:

Īsāk sakot:

  • Ir vairāki apvalki, kas ievieš POSIX sh specifikācijas superset. Dažādās sistēmās /bin/ sh var būt saites uz pelnu, bash, domuzīmi, ksh, zsh utt. Tas vienmēr būs sh-saderīgs, lai gan, nekad csh vai zivis.
  • Tik ilgi, kamēr jūs pielīmējat tikai sh funkcijas, varat( un, iespējams, arī vajadzētu) izmantot #!/bin/ sh , un skriptam jādarbojas labi, neatkarīgi no tā, kura tā ir.
  • Ja jūs sākat izmantot bash raksturīgās funkcijas( t.i., masīvus), jums īpaši vajadzētu pieprasīt bash, jo, pat ja /bin/ sh jau atsaucas uz jūsu sistēmas sistēmu, tā var netikt uz visiem pārējiem sistēmām, un jūsu skripts nedarbosies tur. Tas pats attiecas arī uz zsh un ksh, protams.
  • Pat ja skripts paredzēts tikai personiskai lietošanai, jūs varat pamanīt, ka dažās operētājsistēmās jaunināšanas laikā mainās /bin/ sh .Piemēram, programmā Debian tas bija baiss, bet vēlāk tika aizstāts ar ļoti minimālu defektu. Skripti, kas izmantoja bashisms, taču bija #!/bin/ sh pēkšņi izputējis.

Tomēr:

  • Pat #!/bin/ bash nav tik pareizs. Dažādās sistēmās bash varētu dzīvot /usr/ bin , /usr/pkg/ bin vai /usr/local/ bin .
  • Drošāka iespēja ir #!/usr/bin/ env bash , kas izmanto $ PATH .Lai arī ENV rīks pats par sevi nav stingri garantēts, /usr/bin/ env joprojām darbojas vairāk sistēmās nekā /bin/ bash .

Vai kaut kas jāpievieno paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem?Šeit skatiet pilnu diskusiju pavedienu.

attēla kredīts: Wikipedia