Недавно сам радио на схелл скрипти и видео сам значајну разлику у томе како басх специјална променљива $
и БАСХПИД
понаша. Сваки процес покренут у Линуку биће додељен процесу ИД и тако оперативни систем управља процесом.
Слично, вашој басх терминалској сесији ће такође бити додељен ИД процеса. Постоји посебна променљива која се зове "$"
и „$ БАСХПИД“
који складишти ИД процеса тренутне љуске.
Идите напријед и покрените наредбу испод да видите који је ИД процеса ваше тренутне љуске. Обоје "$"
и „$ БАСХПИД“
ће вратити исту вредност.
$ ецхо $$ # Штампање посебне променљиве $ $ ецхо $ БАСХПИД # Штампање варијабле $ БАСХПИД.
У басх -у када позовемо било који спољни програм из љуске, он ће створити подређени процес/подљуску и програм ће бити послат само у подређеном процесу. Погледајте испод пример где сам ставио једноставну команду надгледања процеса у скрипту под називом „Сампле.сх“ да покаже како родитељска љуска ствара подљуску за покретање програма.
#!/уср/бин/енв басх пс -еф --форест | греп -и баш.
Сада при покретању ове скрипте можемо добити ИД процеса басх. Са доње слике можете разумети када сам позвао скрипту басх ствара подређени процес и покреће скрипту.
$ ./сампле.сх.
Користимо сада обоје "$"
и „$ БАСХПИД“
унутар скрипте и погледајте шта се враћа.
#!/уср/бин/енв басх. одјек "" пс -еф --шума | греп -и баш. одјек "" ецхо "ПИД УСИНГ $ ФОР СЦРИПТ $ 0 ==> $$" ецхо "ПИД КОРИШЋЕЊЕ БАСХПИД -а ЗА СЦРИПТ $ 0 ==> $ БАСХПИД" одјек.
Сада поново покрените скрипту.
$ ./сампле.сх.
У реду, враћа исти ИД процеса. Овде долази стварна разлика. Креирајмо још један подређени процес унутар скрипте покретањем наредбе унутра заграде ()
.
# Складиштење ПИД -а у променљиву... ВАР_ХАСХ = $ (ецхо $$) ВАР_БАСХПИД = $ (ецхо $ БАСХПИД) ецхо "ВАЛУЕ ОФ ВАР_ХАСХ ==> $ ВАР_ХАСХ" ецхо "ВАЛУЕ ОФ ВАР_БАСХПИД ==> $ ВАР_БАСХПИД"
У басх, Заграде ће позвати подређени процес и покренути све што се нађе у заградама. У том случају обоје $
и $ БАСХПИД
треба да сачува нови ИД подређеног процеса. Али са горње слике можете видети да постоји разлика где $
продавнице 382 који је родитељски ИД (ИД процеса скрипте сампле.сх), и $ БАСХПИД
складишти креирани подређени ИД процеса креиран заградама.
Покушајмо сада да разумемо ово понашање. Видећемо шта каже ман страница.
$ ман басх.
Када користите $
, чак и у подљусци, складишти ИД процеса надређеног процеса из којег је креиран. Али БАСХПИД
ће сачувати тренутни ИД процеса, тј. када се позове унутар заграда, сачуваће ИД подређеног процеса.
Не можемо доделити или изменити променљиву $
, али БАСХПИД
може се поново доделити, али нема ефекта.
$ $=10. $ БАСХПИД = 10. $ ецхо $ БАСХПИД.
Могуће је поништити БАСХПИД. Када га искључите, оно губи посебно стање и такође можете почети да га користите као нормалну променљиву.
$ унсет БАСХПИД. $ ецхо $ БАСХПИД. $ БАСХПИД = "Тецминт" $ ецхо $ БАСХПИД.
Чак и ако покушате да доделите ИД процеса љуске, она ће се третирати као кориснички дефинисана променљива јер је већ изгубила своје посебно стање.
$ БАСХПИД = $ (ецхо $$) $ ецхо $$; ецхо $ БАСХПИД.
У овом случају морате користити нову терминалску сесију за БАСХПИД да добије своје посебно стање.
То је то за овај чланак. Видели смо разлику између $
и БАСХПИД
и како се понашају у овом чланку. Прођите кроз овај чланак и поделите са нама своје драгоцене повратне информације.