Başdaky $$bilen $BASHPID arasyndaky tapawudy öwreniň


Recentlyakynda gabyk skriptiniň üstünde işleýärdim we baş üýtgeýän $ we BASHPID özüni alyp barşynda düýpli tapawudy gördüm. Linux-da işleýän her bir amal prosesi ID bilen berler we operasiýa ulgamy şeýle işleýär.

Şonuň ýaly-da, baş terminal sessiýaňyza amal ID-si hem berler. Häzirki gabygyň amal belgisini saklaýan \$\ we \$BASHPID\ atly ýörite üýtgeýji bar.

Häzirki gabygyňyzyň amal ID-sini görmek üçin aşakdaky buýrugy işlediň. \$\ we \$BASHPID\ ikisi hem şol bir bahany yzyna gaýtarar.

$ echo $$               # Printing special variable $
$ echo $BASHPID         # Printing the varibale $BASHPID

Gabykdan haýsydyr bir daşarky programma çagyranymyzda, bu çaga prosessini döreder we programma diňe çaga prosesinde tabşyrylar. Programmanyň işlemegi üçin esasy gabygyň nädip döredilýändigini görkezmek üçin “sample.sh” atly skriptde ýönekeý bir prosessor monitoryny goýanymda aşakdaky mysallara serediň.

#!/usr/bin/env bash

ps -ef --forest | grep -i bash

Indi bu skripti işledenimizde, baş prosess ID-ni alyp bileris. Aşakdaky suratdan, skript başy diýlende, çaga prosesi döredýär we ssenariýany işledip bilersiňiz.

$ ./sample.sh

Indi skriptiň içinde \$\ we \$BASHPID\ ulanalyň we onuň nämä gaýdýandygyny göreliň.

#!/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

Indi skripti täzeden işlediň.

$ ./sample.sh

Bolýar, şol bir proses ID-ni yzyna berýär. Ine hakyky tapawut. Geliň, gabygyň() içindäki buýrugy işledip, skriptiň içinde başga bir çaga prosesini döredeliň.

# 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"

Başda, Parentheses çaga prosesine çagyrar we gabygyň içindäki zatlary işleder. Bu ýagdaýda, $ we $BASHPID ikisi hem täze çaga amal ID-sini saklamalydyr. Aboveöne ýokardaky suratdan, $ esasy ID (skript sample.sh) we $BASHPID 382 saklaýan bir tapawudyň bardygyny görüp bilersiňiz. gabygyň döreden çaga prosesi ID-sini saklaýar.

Indi bu gylyk-häsiýete düşünmäge synanyşalyň. Adam sahypasynyň näme diýýänini göreris.

$ man bash

$ ulananyňyzda, hatda kiçi bukjada-da döredilen ene-atanyň prosess ID-sini saklaýar. <Öne BASHPID häzirki amal ID-ni saklar, ýagny gabygyň içine çagyrylanda çaga prosesi ID-ni saklar.

Üýtgeýjini $ belläp ýa-da üýtgedip bilmeris, ýöne BASHPID üýtgedilip bilner, ýöne onuň täsiri ýok.

$ $=10
$ BASHPID=10
$ echo $BASHPID

BASHPID-i sazlamak mümkin. Gurnasaňyz, aýratyn ýagdaýyny ýitirýär we adaty üýtgeýji hökmünde ulanyp bilersiňiz.

$ unset BASHPID
$ echo $BASHPID
$ BASHPID="Tecmint"
$ echo $BASHPID

Gabynyň prosess ID-sini bellemäge synanyşsaňyzam, ulanyjy kesgitlän üýtgeýji hökmünde kabul ediler, sebäbi ol eýýäm aýratyn ýagdaýyny ýitirdi.

$ BASHPID=$(echo $$)
$ echo $$;echo $BASHPID

Bu ýagdaýda, aýratyn ýagdaýyny almak üçin BASHPID üçin täze terminal sessiýasyny ulanmaly bolarsyňyz.

Bu makala üçin. $ bilen BASHPID we bu makalada özlerini alyp barşynyň arasyndaky tapawudy gördük. Bu makalany öwreniň we gymmatly pikirleriňizi biziň bilen paýlaşyň.