GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è l'ambito delle variabili esportate nella shell Unix?

  • OK, per cominciare, penso che tu intenda ps --pid e non ps ---pid .
  • Non è necessario echo $$ e poi digita il numero in ps --pid number;è sufficiente digitare ps --pid $$ . A meno che tu non stia parlando di

    # echo $$
    42
    # su joe
    % ps --pid 42
    

    nel qual caso stai facendo la cosa giusta.

  • Cosa ti aspettavi?

    --pid pidlist

      Seleziona per ID processo. Identico a -p e p .


    -p pidlist

      Seleziona per PID. Questo seleziona i processi i cui numeri ID di processo appaiono in pidlist . Identico a p e --pid .

    Quindi, quando esegui ps --pid PID_of_shell , ottieni la riga di ps l'output di solo per il processo della shell . Potresti trovare ps -l | grep PID_of_shell più utile; mostrerà qualsiasi riga che contiene PID_of_shell ovunque, anche nella colonna PPID. Cioè, mostrerà i processi figlio della shell. Ma, ovviamente, grep 42 troverà cose come 7428 .

  • La tua ipotesi è corretta; le variabili di ambiente vengono passate da genitore a figlio. Come indicato sopra, il tuo su shell è un figlio della tua shell di login (o altra shell genitore). Si noti, tuttavia, che un processo può modificare il proprio ambiente;sudo è in qualche modo noto per fare questo, e su fa anche questo (ad esempio, cambia $USER , $LOGNAME e $HOME a meno che non specifichi --preserve-environment , e ancora di più se specifichi --login ). Inoltre, un processo può passare ai suoi figli un ambiente diverso da quello che sta usando; la shell lo fa quando dici qualcosa comePAGER=cat man man_page_topic . Riferimenti:1, 2.
  • Quindi, no, se imposti (esporti) una variabile d'ambiente nella shell in un terminale, e poi avvii un altro terminale tramite il window manager, non vedrà la variabile d'ambiente, perché non è un figlio (o discendente) della conchiglia che l'ha fissata. Ma se avvii una nuova finestra di terminale dalla shell (ad esempio, da xterm& ), allora quella finestra di terminale erediterà l'ambiente della shell.

Linux
  1. Linux vs. Unix:qual è la differenza?

  2. Rileva il sistema Init usando la shell?

  3. Cosa succede esattamente quando eseguo un file nella shell?

  4. Qual è la differenza tra nohup e e commerciale

  5. Qual è la differenza tra &> e >&in bash?

Che cos'è la shell in Linux?

Qual è la differenza tra Linux e Unix?

Qual è la differenza tra Login e Non-Login Shell

Cos'è un file .sh?

Qual è l'equivalente Unix/Linux dell'I/O registrato?

Cosa significa la sintassi |&nel linguaggio della shell?