Portál AbcLinuxu, 13. května 2025 10:45

Dotaz: Environment variables

17.5.2020 19:12 ondrej8
Environment variables
Přečteno: 611×
Odpovědět | Admin
Příloha:
Ahojte, potrebujem v bash scripte nastavit environment variables a nasledne pustit subshell. Potom v /proc/cislo_procesu_subshellu/environ by som rad tento environment variables nasiel. Skusal som v pythone nic, teraz v bashi, nechapem preco v tom subore /proc/cislo_procesu_subshellu/environ nevidim ten environment variables co som nastavil. V prilohe je bash script, ktory spustam, nasledne cez ps si zistim cislo subprocesu, ale nastavenu hodnotu T_1=testval tam v /proc/cislo_procesu_subshellu/environ nevidim, fakt neviem preco.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

k3dAR avatar 17.5.2020 21:12 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Environment variables
Odpovědět | | Sbalit | Link | Blokovat | Admin
v prvni rade pri takovem testu si do smycky dej "sleep 1", jinak si zavaris stroj ;-)

duvod proc to v environ nevidis je ten ze server.sh volas s prostredim ktere tu hodnotu jeste nezna, takze abys to v environ videl (pokud to nejde i jinak) tak si udelej wrapper run_server.sh s obsahem
#!/bin/sh

export T_1=testval

server.sh
pak v /proc/pid_of_server.sh/environ uvidis nastavenou T_1 na testval
porad nemam telo, ale uz mam hlavu... nobody
17.5.2020 21:19 PetebLazar | skóre: 34 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: Environment variables
Odpovědět | | Sbalit | Link | Blokovat | Admin
A neni ten /proc environment s jakym byl bash spusten, ne co si sám nastavil? Co z nej spustit další bash a zkontrolovat u něj zda on má hodnotu T_1 nastavenu (ve sve sekci proc).
17.5.2020 21:24 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Environment variables
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zaujímavá otázka ;-)

Navrhujem ten skript upraviť takto:
#!/bin/bash
# subshell-test.sh
export T_1=testval
echo parent shell pid: $$ $BASHPID
echo T1: $T_1

(
echo subshell pid: $$ $BASHPID
echo T1: $T_1
T_1=inahodnota
tr \\0 \\n < /proc/$$/environ |grep T_1
# Inside parentheses, and therefore a subshell . . .
for i in 1 2 3 # Endless loop.
do
  echo "Subshell running . . ."
  sleep 3
  echo T1: $T_1
done
)

echo T1: $T_1

exit $?  # End of script (but will never get here).
Mno a tam človek uvidí, že použitie okrúhlych zátvoriek znamená "vytvorenie nového shell-u" ale neznamená vytvorenie "nového procesu". A pri skúmaní /proc/{pid}/environ tiež zistíš, že nastavením premennej sa nezmení "environment blok" procesu. Ten totiž patrí rodičovi. Takže to, že urobíš "export T_1" len znamená, že pod-procesy dostanú zmodifikovaný environment. Viď tiež proc(5) - environ.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.