30Jul

Millal paremini kasutada #!/bin/ bash # asemel! /bin/ sh Shell Script?

Kui loote uue shelliskripti, peate veenduma, et see on nii probleemivaba kui võimalik, kuid mõnikord võib see natuke segadustundlikum olla, et teada saada, milline Shebang on teie jaoks parim. Sellel märkusel on tänasel SuperUser Q & postitusel vastus segaduses oleva lugeja küsimusele.

tänapäeva küsimus &Vastuste seanss tuleb meile viisakalt SuperUseriga - Q & A veebisaitide kogukonnapõhise grupi Stack Exchange alajaotusega.

Küsimus

SuperUser lugeja Hendre soovib teada, millal on parem kasutada #!/bin/ bash asemel #!/bin/ sh shell skriptides:

Millal on sobivam kasutada #!/bin/ bash asemel #!/bin/ sh shelliskriptides?

Millal on parem kasutada #!/bin/ bash asemel #!/bin/ sh shelliskriptides?

Vastuseks

SuperUseri panustaja gravitatsioonile on meile vastus:

Lühidalt:

  • On olemas mitu kesta, mis rakendab POSIX sh spetsifikatsiooni superset. Erinevatel süsteemidel võib /bin/ sh olla link tuhale, bashile, kriipsile, ksh, zshile jne. See on alati sh-ühilduv, kuigi mitte kunagi csh või kala.
  • Niikaua kui võtate ainult sh funktsioone, võite( ja tõenäoliselt isegi peaks) kasutama #!/bin/ sh ja skript peaks töötama hästi, olenemata sellest, milline shell see on.
  • Kui hakkate kasutama bash-spetsiifilisi funktsioone( st massiive), peaksite spetsiaalselt küsima bashit, sest isegi kui /bin/ sh juba oma süsteemis käivitab, võib see mitte kõigi teiste süsteemide jaoks ja teie skript seal ei käivitu. Sama kehtib ka zsh ja ksh kohta.
  • Isegi kui skript on mõeldud ainult isiklikuks kasutamiseks, võite märgata, et mõned operatsioonisüsteemid muudavad uuenduste ajal /bin/ sh .Näiteks Debianis kasutati seda bashiks, kuid hiljem asendati see väga minimaalse kriipsuga. Skriptid, mis kasutasid bashismisid, kuid olid #!/bin/ sh äkki murdis.

Kuid:

  • Isegi #!/bin/ bash ei ole nii õige. Erinevate süsteemide puhul võivad bashid elada /usr/ bin , /usr/pkg/ bin või /usr/local/ bin .
  • Usaldusväärsem variant on #!/usr/bin/ env bash , mis kasutab $ PATH .Kuigi env-vahendit ise ei rangelt tagatud, kasutab /usr/bin/ env endiselt rohkem süsteeme kui /bin/ bash .

Kas teil on seletamiseks midagi lisada? Helistage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Tutvu täieliku arutelu teemaga siit.

Image Credit: Wikipedia