Bash-subshells

Bash Subshells



Soms moet u een of meer opdrachten of scripts op de achtergrond uitvoeren. Deze taak kan worden uitgevoerd door alle opdrachten of scripts in een scriptbestand te schrijven en het bestand uit te voeren met ampersand (&) of door de opdrachten of scripts vanuit de huidige shell in de subshell uit te voeren. De subshell kan worden gebruikt om meerdere opdrachten of scripts uit te voeren door de $() of de backticks (`) in te sluiten. De methoden voor het gebruik van de Bash-subshell worden in deze zelfstudie getoond.

Verschillende voorbeelden van subshell

De verschillende manieren om het script in de subshell uit te voeren worden in dit deel van de tutorial getoond.

Voorbeeld 1: Voer de subshell uit met behulp van het enkele aanhalingsteken en het dubbele aanhalingsteken

Maak een Bash-bestand met het volgende script dat de huidige datum en tijd afdrukt. Vervolgens wordt de variabele $strVal afgedrukt door het subshell-script tussen enkele aanhalingstekens en dubbele aanhalingstekens te plaatsen.







#!/bin/bash

#Druk het `date`-commando af in de subshell

echo 'Vandaag is `datum` '

#Definieer een tekenreeksvariabele

strVal = 'Bash-subschaal'

#Druk de variabele in de subshell af met enkele aanhalingstekens

echo 'De uitvoer van enkele aanhalingstekens:' '$(echo $strVal)'

#Druk de variabele in de subshell af met dubbele aanhalingstekens

echo 'De uitvoer van dubbele aanhalingstekens:' ' $(echo $strVal) '

De volgende uitvoer verschijnt na het uitvoeren van het script. Het subshell-script wordt afgedrukt als een tekenreeks wanneer het tussen de enkele aanhalingstekens staat. Het subshell-script wordt uitgevoerd wanneer het tussen dubbele aanhalingstekens staat:





Voorbeeld 2: zoek alle bestanden van de specifieke extensie met behulp van de subshell

Maak een Bash-bestand met het volgende script dat de bestandsextensie als invoer van de gebruiker gebruikt. Vervolgens wordt de opdracht 'ls' uitgevoerd in de subshell om alle bestanden van die specifieke extensie te doorzoeken.





#!/bin/bash

echo -N 'Voer de naam van de bestandsextensie in:'

#Neem de naam van de bestandsextensie die zal worden doorzocht

lezen ext

#Controleer de invoerwaarde

als [ [ $ext == '' ] ] ; Dan

#Foutbericht afdrukken

echo 'Er wordt geen verlenging gegeven.'

anders

echo 'Bestandsnamen met $ext verlenging:'

#Druk alle bestandsnamen met de opgegeven extensie af

echo ' $( echo `ls *.$ext` ) '

zijn

De volgende uitvoer verschijnt na het uitvoeren van het script met de invoer 'txt'. Volgens de uitvoer zijn er drie tekstbestanden op de huidige locatie:



De volgende uitvoer verschijnt na het uitvoeren van het script met de lege waarde:

Voorbeeld 3: Voer de rekenkundige uitdrukking uit in de subshell

Maak een Bash-bestand met het volgende script waarbij de variabele met dezelfde naam wordt gebruikt in de hoofdshell en de subshell. De rekenkundige bewerking wordt gedefinieerd in de hoofdshell en de subshell.

#!/bin/bash

#Definieer een bovenliggende shell-variabele

nummer = 10

#Druk het resultaat af op basis van de variabele van de bovenliggende shell

( ( resultaat = $nummer + 5 ) )

echo 'De som van $nummer +5= $resultaat '

#Maak een subshell-variabele met dezelfde naam als de bovenliggende shell

( nummer = twintig ; ( ( resultaat = $nummer + 10 ) ) ; echo 'De som van $nummer +5= $resultaat ' )

#Druk het resultaat opnieuw af op basis van de variabele van de bovenliggende shell

echo 'De som van $nummer +5= $resultaat '

De volgende uitvoer verschijnt na het uitvoeren van het script. De eerste en de laatste uitvoer tonen het resultaat van de hoofdschil. De tweede uitvoer toont het resultaat van de subshell. De variabele van de hoofdshell wordt niet gewijzigd door de variabele van de subshell:

Voorbeeld 4: Voer meerdere opdrachten uit in de subshell

Maak een Bash-bestand met het volgende script dat de uitvoer van de opdracht 'echo' naar de opdracht 'sed' stuurt die de overeenkomende tekenreekswaarde vervangt door een andere tekenreeks. De uitvoer van de opdracht 'echo' is 'JavaScript'. Deze waarde wordt dus vergeleken met 'Java' en 'JavaScript'. Als er een overeenkomst wordt gevonden, worden de overeenkomende tekenreeksen vervangen door de tekenreeks 'Type'.

#!/bin/bash

#Definieer een tekenreekswaarde

strVal = 'JavaScript'

#Druk de oorspronkelijke tekenreekswaarde af

echo 'Tekenreekswaarde: $strVal '

#Druk de subshell-waarde af

echo -N 'Subshell-waarde: '

echo ' $(echo $strVal | sed 's|Java|JavaScript-type|') '

De volgende uitvoer verschijnt na het uitvoeren van het script. Volgens de uitvoer wordt de tekenreeks 'Java' vervangen door de tekenreeks 'Type'. De uitvoer van de subshell is 'JavaScript TypeScript':


Conclusie

Een of meer opdrachten of scripts kunnen worden uitgevoerd met behulp van de subshell zonder de hoofdshell te beïnvloeden. De doeleinden van het gebruik van de subshell worden in deze zelfstudie uitgelegd aan de hand van meerdere voorbeelden. Verschillende soorten taken, zoals het doorzoeken van bestanden, het berekenen van de som van getallen, het vervangen van de tekenreeksen, enz. worden in de gegeven voorbeelden uitgevoerd door de subshell. Het concept van het gebruik van de subshell wordt goed gedemonstreerd en de nieuwe Bash-gebruikers kunnen nu de subshell gebruiken na het lezen van deze tutorial.