Ich bin auf Debian GNU / Linux 9. Ich weiß, /procist etwas Besonderes , ich weiß, was /proc/selfist .
Dieser Befehl
sh -c '/bin/cat /proc/self/comm - </proc/self/comm'
ergibt
cat
sh
Das Muster wird ähnlich sein, wenn ich dashanstelle von verwende sh. Aber mit bash, kshoder zshdas Ergebnis
cat
cat
Nehmen /proc/self/statstatt /proc/self/commich kann bestätigen, dass die zwei cat-s in der Tat der gleiche einzelne Prozess sind. Anscheinend unterscheiden sich die Muscheln unter der Haube, es ist in Ordnung. Jetzt nehmen wir
sh -c '/bin/cat /proc/self/environ - </proc/self/environ'
Nachdem ich das Obige beobachtet habe, mit shoder dashich erwarte, die Umgebung der catersten, die Umgebung der Shell später zu sehen. Es scheint zu funktionieren (beide Umgebungen sind höchstwahrscheinlich sowieso identisch, daher ist es schwer zu sagen, ob alles wie erwartet funktioniert, aber mein Punkt ist: Keine environist leer).
Mit bash, kshoder zshich erwarte, die Umgebung catzweimal zu sehen, aber es wird nur einmal gedruckt . Aufteilung in zwei getrennte Fälle:
bash -c '/bin/cat - </proc/self/environ'druckt nichts, als wäreenvirones leer;bash -c '/bin/cat /proc/self/environ'druckt etwas wie erwartet.
Was ist los? Dies ist bei commoder nicht der Fall stat. Warum ist environanders?
$ uname -a
Linux barbaz 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1 (2018-04-29) x86_64 GNU/Linux