If-Koubou

Kad ir labāk izmantot #! / Bin / bash nevis #! / Bin / sh vietā Shell Script?

Kad ir labāk izmantot #! / Bin / bash nevis #! / Bin / sh vietā Shell Script? (Kā)

Kad jūs izveidojat jaunu čaulas skriptu, jūs vēlaties pārliecināties, vai tas ir bez problēmām, bet dažreiz tas var būt nedaudz mulsinošs, lai uzzinātu, kura shebang ir labākā lieta, ko jūs varat izmantot. Šajā piezīmē šodienas SuperUser Q & A ziņai ir atbilde uz sajaukt lasītāja jautājumu.

Šodienas jautājumu un atbilžu sesija mums priecājas par SuperUser - Stack Exchange dalību, kas ir kopienas vadīta Q & A tīmekļa vietņu grupa.

Jautājums

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

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

Kad tas ir labāk izmantot #! / bin / bash tā vietā #! / bin / sh čaulas skriptā?

Atbilde

SuperUser ieguldītājs gravitāte ir atbilde mums:

Īsumā:

  • Pastāv vairāki čaulas, kas ievieš POSIX sh specifikācijas superset. Dažādās sistēmās / bin / sh var būt saite uz pelniem, bash, domuzīme, ksh, zsh uc Tas vienmēr būs sh-saderīgs gan, nekad csh vai zivis.
  • Tik ilgi, kamēr jūs pieķērušies tikai sh funkcijām, jūs varat (un, iespējams, pat to) izmantot #! / bin / sh un skriptam jādarbojas labi, neatkarīgi no tā, kurš čaulas tas 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 Jebkurā gadījumā sistēma jau sāk darboties, tā var nenotikt uz visām pārējām sistēmām, un jūsu skripts nedarbosies tajā. 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žas operētājsistēmas mainās / bin / sh uzlabojumu laikā. Piemēram, programmā Debian tas bija baiss, bet vēlāk tika aizstāts ar ļoti minimālu defektu. Skripti, kas izmantoja bashisms, bet bija #! / bin / sh pēkšņi izputējis.

Tomēr:

  • Pat #! / bin / bash vai nav tik taisnība. 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. Kaut arī pats env instruments nav stingri garantēts, / usr / bin / env joprojām darbojas vairāk sistēmās nekā / bin / bash dara

Vai kaut ko pievienot 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ēlu kredīts: Wikipedia