Uzziniet atšķirību starp $$un $BASHPID Bashā
Nesen es strādāju pie čaulas skripta, un es redzēju būtiskas atšķirības tajā, kā darbojas īpašais mainīgais $
un BASHPID
. Katram procesam, kas darbojas Linux, tiks piešķirts procesa ID, un tieši tā operētājsistēma apstrādā procesu.
Līdzīgi arī jūsu bash termināla sesijai tiks piešķirts procesa ID. Ir īpašs mainīgais ar nosaukumu "$"
un "$BASHPID"
, kas saglabā pašreizējā čaulas procesa ID.
Pārejiet uz priekšu un palaidiet zemāk esošo komandu, lai redzētu, kāds ir jūsu pašreizējā čaulas procesa ID. Gan "$"
, gan "$BASHPID"
atgriezīs to pašu vērtību.
$ echo $$ # Printing special variable $ $ echo $BASHPID # Printing the varibale $BASHPID
Ja mēs no čaumalas izsaucam jebkuru ārēju programmu, tas izveidos bērnu procesu/apakšvisi, un programma tiks iesniegta tikai pakārtotajā procesā. Skatiet zemāk redzamo piemēru, kurā es ievietoju vienkāršu procesa monitora komandu skriptā ar nosaukumu “sample.sh”, lai parādītu, kā vecākā čaula izveido apakšizlāni, lai palaistu programmu.
#!/usr/bin/env bash ps -ef --forest | grep -i bash
Tagad, palaižot šo skriptu, mēs varam iegūt bash procesa ID. No zemāk redzamā attēla jūs varat saprast, kad es saucu skriptu, ka bash izveido bērnu procesu un palaiž skriptu.
$ ./sample.sh
Tagad skriptā izmantosim gan "$"
, gan "$BASHPID"
un redzēsim, ko tas atdod.
#!/usr/bin/env bash echo "============================" ps -ef --forest | grep -i bash echo "============================" echo "PID USING $ FOR SCRIPT $0 ==> $$" echo "PID USING BASHPID FOR SCRIPT $0 ==> $BASHPID" echo
Tagad palaidiet skriptu vēlreiz.
$ ./sample.sh
Labi, tas atgriež to pašu procesa ID. Šeit nāk faktiskā atšķirība. Izveidosim vēl vienu pakārtoto procesu skripta iekšpusē, palaižot komandu iekavās()
.
# STORING THE PID INTO A VARIABLE… VAR_HASH=$(echo $$) VAR_BASHPID=$(echo $BASHPID) echo "VALUE OF VAR_HASH ==> $VAR_HASH" echo "VALUE OF VAR_BASHPID ==> $VAR_BASHPID"
Bashā iekavas atsauksies uz bērnu procesu un palaidīs visu, kas atrodas iekavās. Tādā gadījumā gan $
, gan $BASHPID
būtu jāuzglabā jauns pakārtotā procesa ID. No iepriekš minētā attēla var redzēt, ka ir atšķirība, kur $
tiek glabāti 382, kas ir vecāku ID (skripta sample.sh procesa ID), un $BASHPID
glabā izveidoto bērnu procesu ID, kas izveidots iekavās.
Tagad mēģināsim izprast šo uzvedību. Mēs redzēsim, ko saka man lapa.
$ man bash
Ja izmantojat $
, pat apakšvāciņā tas saglabā vecāku procesa procesa ID, no kura tas tika izveidots. Bet BASHPID
saglabās pašreizējo procesa ID, t.i., ja to izsauks iekavās, tas saglabās bērna procesa ID.
Mēs nevaram piešķirt vai modificēt mainīgo $
, taču BASHPID
var mainīt, taču tam nav ietekmes.
$ $=10 $ BASHPID=10 $ echo $BASHPID
Ir iespējams atiestatīt BASHPID. Pēc atiestatīšanas tas zaudē savu īpašo stāvokli, kā arī jūs varat sākt to izmantot kā parasto mainīgo.
$ unset BASHPID $ echo $BASHPID $ BASHPID="Tecmint" $ echo $BASHPID
Pat ja mēģināt piešķirt čaulas procesa ID, tas tiks uzskatīts par lietotāja definētu mainīgo, jo tas jau ir zaudējis savu īpašo stāvokli.
$ BASHPID=$(echo $$) $ echo $$;echo $BASHPID
Šajā gadījumā BASHPID ir jāizmanto jauna termināļa sesija, lai iegūtu tā īpašo stāvokli.
Tas ir šis raksts. Šajā rakstā esam redzējuši atšķirību starp $
un BASHPID
un kā viņi izturas. Izlasiet šo rakstu un dalieties ar mums savās vērtīgajās atsauksmēs.