GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Welchen Umfang haben exportierte Unix-Shell-Variablen?

  • OK, für den Anfang, ich glaube, Sie meinen ps --pid und nicht ps ---pid .
  • Sie müssen nicht echo $$ und geben Sie dann die Nummer in ps --pid number ein;Es genügt, ps --pid $$ einzugeben . Es sei denn, Sie sprechen von

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

    in diesem Fall tust du das Richtige.

  • Was haben Sie erwartet?

    --pid pidlist

      Nach Prozess-ID auswählen. Identisch mit -p und p .


    -p pidlist

      Auswahl nach PID. Dies wählt die Prozesse aus, deren Prozess-ID-Nummern in der pidlist erscheinen . Identisch mit p und --pid .

    Also, wenn Sie ps --pid PID_of_shell machen , erhalten Sie die Zeile ps 's Ausgabe nur für den Shell-Prozess . Möglicherweise finden Sie ps -l | grep PID_of_shell nützlicher; es zeigt jede Zeile, die PID_of_shell enthält überall, auch in der PPID-Spalte. Das heißt, es werden untergeordnete Prozesse der Shell angezeigt. Aber natürlich grep 42 findet Dinge wie 7428 .

  • Ihre Vermutung ist richtig; Umgebungsvariablen werden vom Elternteil zum Kind weitergegeben. Wie oben angegeben, Ihr su Shell ist ein Kind Ihrer Login-Shell (oder einer anderen Eltern-Shell). Beachten Sie jedoch, dass ein Prozess seine Umgebung ändern kann;sudo ist dafür etwas berüchtigt, und su tut es auch (z.B. ändert es $USER , $LOGNAME , und $HOME es sei denn, Sie geben --preserve-environment an , und noch mehr, wenn Sie --login angeben ). Außerdem kann ein Prozess seinen Kindern eine andere Umgebung übergeben als die, die er verwendet; die Shell macht das, wenn Sie etwas wie PAGER=cat man man_page_topic sagen . Referenzen:1, 2.
  • Also, nein, wenn Sie eine Umgebungsvariable in der Shell in einem Terminal setzen (exportieren) und dann ein anderes Terminal über den Fenstermanager starten, wird es die Umgebungsvariable nicht sehen, weil es kein Kind (oder Nachkomme) ist der Schale, die es gesetzt hat. Aber wenn Sie ein neues Terminalfenster aus der Shell starten (z. B. durch xterm& ), dann erbt dieses Terminalfenster die Umgebung der Shell.

Linux
  1. Init-System mit der Shell erkennen?

  2. Was genau passiert, wenn ich eine Datei in der Shell ausführe?

  3. Der Unterschied in der Verwendung zwischen Shell-Variablen und Umgebungsvariablen?

  4. Welches sind die speziellen Parameter/Variablen der (Bash-)Shell?

  5. Hinzufügen von Zeilenumbrüchen zu Unix-Shell-Variablen

Linux vs. Unix:Was ist der Unterschied?

Was ist die Shell unter Linux?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist eine .sh-Datei?

Was ist die Standard-Shell von Busybox?