Hva er #! / Bin / bash i shell scripting? Hva er forskjellen mellom / bin / sh og / bin / bash? Hvorfor fungerer shell-skriptet noen ganger uten linjene?


Beste svaret

#!/bin/bash

Dette er kjent som shebang, det forteller tolk at følgende linjer er skrevet for bash, så kjør denne filen som bash-skript.

#Example: Scripts are usually executed like below:

./scriptName

Så shebang bestemmer hvordan man skal tolke skriptet, noen ganger kan det være som følger:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Så disse linjene bestemmer hvordan manusene skal tolkes og henrettes. kommer nå til hvorfor /bin/sh?

Det peker på et av det konfigurerte skallet, noen ganger sh peker på bash, en gang et annet skall som cshell, dash,zsh ,ksh osv.

Eksempel:

#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

Så hvis du bruker #!/bin/sh i skriptet ditt, vil oppførselen til skriptet ditt variere basert på hvilket skall sh peker på systemet ditt. Vær oppmerksom på at du kan overstyre shebangen ved å kjøre skriptet slik:

bash scriptName

#or

sh scriptName

I ovennevnte to tilfeller vil shebang ikke påvirke kjøringen, og det vil bli gjort av bash og sh (skall pekt av dette).

Svar

Vel,» nøyaktig «hvordan de fungerer har mange nivåer av detaljer, så vi blir ganske unøyaktige her. Alle programmer kjøres ved å sette koden i en spesifikk, dedikert del av minnet, og deretter påkalle inngangspunktet for dette minnebildet. Etter det kjører programmet bare.

Handlingen med å sette kodebildet i minnet utføres av operativsystemet og er det vi kaller ‘lansering’ eller utføring av programmet. OS gjør det på eget initiativ bare en gang; ved oppstart når den starter init prosessen. init prosessen og dens etterkommere ber operativsystemet om å starte andre prosesser ved å påkalle exec OS-systemanrop.

Skallet er på en gang spesielt og også vanlig. Det er bare et annet program som kjører, som alle andre. Den har ingen spesielle superkrefter eller spesielle egenskaper. Det har som formål å la brukeren få tilgang til tjenestene til operativsystemet, først og fremst for å starte andre programmer som brukeren spesifiserer. Det gir brukertilgjengelige metoder som lar brukeren få tilgang til filsystemet, og å spesifisere hvordan noen standardstrømmer av datakommunikasjon brukes ( stdin , stdout , og stderr ).

Skjell gir et programmeringsspråk som kan brukes til gjøre ting på automatiserte måter, ta beslutninger og iterere, for effektivitet, og slik at de kan fungere uten brukerinteraksjon. De gir og bruker en spesiell syntaks og notasjon som brukeren må lære og bruke for å påkalle programmeringsspråk og kommandolinjebehandling. Behandlingen av skallkommandoene kan komme fra en interaktiv terminal, eller fra tekstfiler som inneholder skript.

Programmene som et skall starter kalles underprosesser av skallet. Enhver prosess kan starte en annen prosess, så skallet er ikke spesielt i den forstand. Skallet er optimalisert for å tillate brukeren å spesifisere hvordan de skal starte barneprosesser. Du kan se arvingen til alle prosessene på en Linux-vert ved hjelp av kommandoen

ps -e lf

Et eller annet sted i listen finner du selve prosessen ps , og den vil vises som en underordnet prosess av skallprosessen du brukte til å starte den.

Der er langt flere detaljer; altfor mange til å dekke i et Quora-svar.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *