Wat is #! / Bin / bash in shellscripting? Wat is het verschil tussen / bin / sh en / bin / bash? Waarom werkt het shellscript soms zonder de regels?


Beste antwoord

#!/bin/bash

Dit staat bekend als shebang, het vertelt de interpreter dat de volgende regels zijn geschreven voor bash, dus voer dit bestand uit als bash-script.

#Example: Scripts are usually executed like below:

./scriptName

Dus de shebang bepaalt hoe het script moet worden geïnterpreteerd, soms kan het als volgt zijn:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Dus deze regels bepalen hoe de scripts worden geïnterpreteerd en uitgevoerd. komt nu naar Waarom /bin/sh?

Het verwijst naar een van de geconfigureerde shell, soms verwijst sh naar bash, soms een andere shell zoals cshell, dash,zsh ,ksh etc.

Voorbeeld:

#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

Dus als je #!/bin/sh in je script gebruikt, dan zal het gedrag van je script verschillen op basis van welke shell sh verwijst naar uw systeem. Merk op dat je de shebang kunt omzeilen door je script uit te voeren zoals:

bash scriptName

#or

sh scriptName

In bovenstaande twee gevallen heeft shebang geen invloed op de uitvoering en zal het worden gedaan door bash en sh (shell hier naar verwezen).

Antwoord

Nou, precies hoe ze werken is veel detailniveaus, dus we zullen hier vrij onnauwkeurig zijn. Alle programmas worden uitgevoerd door hun code in een specifiek, speciaal gedeelte van het geheugen te plaatsen en vervolgens het toegangspunt van die in-memory code-afbeelding op te roepen. Daarna wordt het programma gewoon uitgevoerd.

De handeling van het in het geheugen plaatsen van de code-afbeelding wordt uitgevoerd door het besturingssysteem en is wat we starten of uitvoeren van het programma noemen. Het OS doet dat maar één keer op eigen initiatief; tijdens het opstarten wanneer het het init -proces start. Het init -proces en zijn nakomelingen vragen het besturingssysteem om andere processen te starten door de exec OS-systeemaanroep.

De shell is tegelijk speciaal en ook gewoon. Het is gewoon een ander programma dat draait, net als elk ander. Het heeft geen bijzondere superkrachten of speciale eigenschappen. Het heeft tot doel de gebruiker toegang te geven tot de services van het besturingssysteem, voornamelijk voor het starten van andere programmas die de gebruiker specificeert. Het biedt voor de gebruiker toegankelijke methoden waarmee de gebruiker toegang heeft tot het bestandssysteem en om te specificeren hoe sommige standaard datacommunicatiestromen worden gebruikt ( stdin , stdout , en stderr ).

Shells bieden een programmeertaal die kan worden gebruikt om dingen op geautomatiseerde manieren doen, beslissingen nemen en itereren, voor efficiëntie, zodat ze kunnen werken zonder gebruikersinteractie. Ze bieden en gebruiken een speciale syntaxis en notatie die de gebruiker moet leren en gebruiken om de programmeertaal en opdrachtregelverwerking aan te roepen. De verwerking van de shell-opdrachten kan afkomstig zijn van een interactieve terminal, of van tekstbestanden die scripts bevatten.

De programmas die een shell start, worden kindprocessen van de shell genoemd. Elk proces kan een ander proces starten, dus de shell is in die zin niet speciaal. De shell is geoptimaliseerd zodat de gebruiker kan specificeren hoe de onderliggende processen moeten worden gestart. Je kunt de heirarchie van alle processen op een Linux-host zien met behulp van het commando

ps -e lf

Ergens in de lijst vind je het ps – proces zelf, en het zal verschijnen als een onderliggend proces van het shell-proces dat u gebruikte om het te starten.

Daar zijn veel meer details; veel te veel om in een Quora-antwoord te behandelen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *