Ce este #! / Bin / bash în scripturile shell? Care este diferența dintre / bin / sh și / bin / bash? De ce, uneori, scriptul shell funcționează fără linii?


Cel mai bun răspuns

#!/bin/bash

Aceasta este cunoscută sub numele de shebang, îi spune interpretului că următoarele rânduri sunt scrise pentru bash, deci executați acest fișier ca script bash.

#Example: Scripts are usually executed like below:

./scriptName

Deci, shebang determină cum să interpreteze scriptul, uneori ar putea fi după cum urmează:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Deci, aceste linii determină modul în care ar trebui să fie scripturile să fie interpretat și executat. acum vine la De ce /bin/sh?

Arată către unul dintre shell-urile configurate, uneori sh indică spre bash, uneori și alte cochilii precum cshell, dash,zsh ,ksh etc.

Exemplu:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Deci, dacă utilizați #!/bin/sh în script, comportamentul scriptului dvs. va diferi în funcție de shell-ul sh indică sistemul dvs. Rețineți că puteți suprascrie shebang-ul executând scriptul cum ar fi:

bash scriptName

#or

sh scriptName

În mai sus de două cazuri, shebang nu va avea impact asupra execuției și va fi realizat de bash și sh (shell indicat de aceasta).

Răspunde

Ei bine,„ exact ”cum funcționează multe niveluri de detaliu, așa că vom fi destul de inexact aici. Toate programele sunt executate punându-și codul într-o secțiune specifică dedicată a memoriei și apoi invocând punctul de intrare al acelei imagini de cod în memorie. După aceea, programul rulează.

Actul de a pune imaginea codului în memorie este realizat de sistemul de operare și este ceea ce numim „lansarea” sau executarea programului. Sistemul de operare face asta din proprie inițiativă o singură dată; la momentul pornirii când lansează procesul init . Procesul init și descendenții acestuia solicită sistemului de operare să lanseze alte procese, invocând exec Apel sistem OS.

Shell-ul este simultan special și, de asemenea, obișnuit. Este doar un alt program care rulează, ca oricare altul. Nu are super-puteri speciale sau proprietăți speciale. Are scopul de a permite utilizatorului să acceseze serviciile sistemului de operare, în primul rând pentru lansarea altor programe pe care utilizatorul le specifică. Acesta oferă metode accesibile utilizatorului care îi permit utilizatorului să acceseze sistemul de fișiere și să specifice modul în care sunt utilizate unele fluxuri standard de comunicare a datelor ( stdin , stdout și stderr ).

Shells furnizează un limbaj de programare care poate fi utilizat pentru faceți lucrurile în moduri automate, luând decizii și repetând, pentru eficiență, astfel încât să poată funcționa fără interacțiunea utilizatorului. Acestea furnizează și utilizează o sintaxă specială și o notație pe care utilizatorul trebuie să o învețe și să o utilizeze pentru a invoca limbajul de programare și procesarea liniei de comandă. Prelucrarea comenzilor shell poate proveni de la un terminal interactiv sau din fișiere text care conțin scripturi.

Programele lansate de un shell se numesc procese copil ale shell-ului. Orice proces poate lansa un alt proces, astfel încât shell-ul nu este special în acest sens. Shell-ul este optimizat pentru a permite utilizatorului să specifice cum să își lanseze procesele secundare. Puteți vedea moștenirea tuturor proceselor pe o gazdă Linux folosind comanda

ps -e lf

Undeva în listă veți găsi procesul „ ps în sine și va apărea ca un proces secundar al procesului shell pe care l-ați folosit pentru a-l lansa.

Acolo sunt mult mai multe detalii; mult prea multe pentru a acoperi într-un răspuns Quora.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *