30Jul

Kada je bolje koristiti #!/bin/ bash Umjesto #!/bin/ je u Shell skripti?

Kada izradite novu skriptu ljuske, želite biti sigurni da je problem što je više moguće problematičan, ali ponekad može biti pomalo zbunjujuće da bi se znalo koje je shebang najbolji za korištenje. Na toj napomenici, današnji SuperUser Q & A post ima odgovor na pitanje zbunjenog čitatelja.

Današnje pitanje &Sesija odgovora nam dolazi zahvaljujući SuperUseru - podjele Stack Exchange-a, grupiranjem zajednice Q & A web stranica.

Pitanje

SuperUser čitač Hendre želi znati kada je bolje koristiti #!/bin/ bash umjesto #!/bin/ sh u skriptama ljuske:

Kada je prikladno koristiti #!/bin/ bash umjesto #!/bin/ sh u skripti ljuske?

Kada je bolje koristiti #!/bin/ bash umjesto #!/bin/ sh u shell skripti?

Odgovor

SuperUser contributor grawity ima odgovor za nas:

Ukratko:

  • Postoji nekoliko školjaka koji implementiraju superset POSIX sh specifikacije. Na različitim sustavima, /bin/ sh može biti veza na jasen, bash, crticu, ksh, zsh, itd. Uvijek će biti sh-kompatibilan iako, nikada csh ili ribe.
  • Dokle god se zanima samo za sh značajke, možete( i vjerojatno čak i trebate) koristiti #!/bin/ sh i skripta bi trebala raditi, bez obzira na to koja je ljuska.
  • Ako počnete koristiti značajke specifične za bash( tj. Polja), trebali biste posebno tražiti bash jer čak i ako /bin/ sh već poziva bash na vašem sustavu, to možda neće biti na sustavu svih ostalih, a vaša skripta neće raditi tamo. Isto vrijedi i za zsh i ksh, naravno.
  • Čak i ako je skripta samo za osobnu upotrebu, možda ćete primijetiti da neki operacijski sustavi mijenjaju /bin/ sh tijekom nadogradnje. Na primjer, na Debianu se nekad nalazila bash, no kasnije je zamijenjena minimalnom crticom. Skripte koje su koristile bashizme, ali imale su #!/bin/ sh iznenada je razbio.

Međutim:

  • Čak i #!/bin/ bash nije točan. Na različitim sustavima bash može živjeti u /usr/ bin , /usr/pkg/ bin ili /usr/local/ bin .
  • Pouzdanija opcija je #!/usr/bin/ env bash , koji koristi $ PATH .Iako sam env alat nije strogo zajamčen, /usr/bin/ env još uvijek radi na više sustava od /bin/ bash .

Imate li nešto za objašnjenje? Zvuči u komentarima.Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.

Image Credit: Wikipedia