Vad är #! / Bin / bash i shell-skript? Vad är skillnaden mellan / bin / sh och / bin / bash? Varför fungerar shell-skriptet ibland utan raderna?


Bästa svaret

#!/bin/bash

Detta kallas shebang, det säger till tolken att följande rader är skrivna för bash, så kör den här filen som bash-skript.

#Example: Scripts are usually executed like below:

./scriptName

Så shebang bestämmer hur man ska tolka manuset, ibland kan det vara som följer:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Så dessa rader avgör hur manus ska tolkas och utföras. kommer nu till Varför /bin/sh?

Det pekar på ett av det konfigurerade skalet, ibland sh pekar på bash, någon gång ett annat skal som cshell, dash,zsh ,ksh etc.

Exempel:

#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å om du använder #!/bin/sh i ditt skript, kommer skriptets beteende att skilja sig beroende på vilket skal sh pekar på ditt system. Observera att du kan åsidosätta shebang genom att köra ditt skript som:

bash scriptName

#or

sh scriptName

I ovanstående två fall kommer shebang inte att påverka körningen och det kommer att göras av bash och sh (skalet pekas ut av detta).

Svar

Tja,” exakt ”hur de fungerar har många detaljeringsnivåer, så här blir vi ganska inexakta. Alla program körs genom att sätta sin kod i en specifik, dedikerad del av minnet och sedan anropa ingångspunkten för den in-minneskodbilden. Efter det körs bara programmet.

Att sätta kodbilden i minnet utförs av operativsystemet och är vad vi kallar ”starta” eller köra programmet. Operativsystemet gör det på eget initiativ bara en gång; vid starttid när den startar init -processen. init -processen och dess ättlingar ber operativsystemet att starta andra processer genom att anropa exec OS-systemanrop.

Skalet är på en gång speciellt och också vanligt. Det är bara ett annat program som körs, som alla andra. Det har inga speciella superkrafter eller speciella egenskaper. Det har till syfte att låta användaren komma åt OS: s tjänster, främst för att starta andra program som användaren anger. Det ger användaråtkomliga metoder som gör att användaren kan komma åt filsystemet och specificera hur vissa standardströmmar för datakommunikation används ( stdin , stdout och stderr ).

Skal ger ett programmeringsspråk som kan användas för att göra saker på automatiserade sätt, fatta beslut och itera, för effektivitet, och så att de kan fungera utan användarinteraktion. De tillhandahåller och använder en speciell syntax och notation som användaren måste lära sig och använda för att åberopa programmeringsspråket och kommandoradsbearbetningen. Bearbetningen av skalkommandona kan komma från en interaktiv terminal eller från textfiler som innehåller skript.

De program som ett skal startar kallas skalprocesser för skalet. Varje process kan starta en annan process, så skalet är inte speciellt i den meningen. Skalet är optimerat för att låta användaren ange hur man startar sina underprocesser. Du kan se arvet från alla processer på en Linux-värd med kommandot

ps -e lf

Någonstans i listan hittar du själva processen ps och den kommer att visas som en underprocess av skalprocessen som du använde för att starta den.

Där är mycket mer detaljerade; alldeles för många att täcka i ett Quora-svar.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *