Unerwartetes Verhalten beim Abfragen der PID von Bash oder Zsh bei Verwendung des Flags --command/-c

Unerwartetes Verhalten beim Abfragen der PID von Bash oder Zsh bei Verwendung des Flags --command/-c

Ich beobachte ein merkwürdiges Verhalten, wenn ich die PID bestimmter Shells untersuche, wenn diese in einem nicht interpretierten Kontext ausgeführt werden.

In den folgenden Beispielen sehe ich, dass die PID wie erwartet auf die Shell zeigt.

sh-4.3$ echo 'readlink /proc/$$/exe' | /bin/bash
/bin/bash
sh-4.3$ echo 'readlink /proc/$$/exe' | /bin/tcsh
/bin/tcsh
sh-4.3$ echo 'readlink /proc/$$/exe' | /bin/zsh
/usr/bin/zsh

Wenn ich jedoch dieselbe Idee mit -canstelle einer Pipe ausprobiere, lautet die PID in Bourne-kompatiblen Shells „for“ readlinkanstelle der Shell.

sh-4.3$ /bin/tcsh -c 'readlink /proc/$$/exe'
/bin/tcsh
sh-4.3$ /bin/bash -c 'readlink /proc/$$/exe'
/usr/bin/readlink
sh-4.3$ /bin/zsh -c 'readlink /proc/$$/exe'
/usr/bin/readlink

Ich habe auch festgestellt, dass ich meistens die erwarteten Ergebnisse erhalte, wenn ich den Befehl als zusammengesetzte Anweisung statt als einzelne Anweisung verfasse ( zshscheint etwas hartnäckiger zu sein).

sh-4.3$ /bin/bash -cf 'readlink /proc/$$/exe | cat'
/bin/bash
sh-4.3$ /bin/zsh -cf 'readlink /proc/$$/exe | cat'
/usr/bin/zsh
sh-4.3$ /bin/bash -cf 'readlink /proc/$$/exe; :'
/bin/bash
sh-4.3$ /bin/zsh -cf 'readlink /proc/$$/exe; :'
/bin/zsh
sh-4.3$ /bin/bash -cf ':; readlink /proc/$$/exe'
/bin/bash
sh-4.3$ /bin/zsh -cf ':; readlink /proc/$$/exe'
/usr/bin/readlink
sh-4.3$ /bin/bash -c 'readlink /proc/$$/exe > /dev/stdout'
/bin/bash
sh-4.3$ /bin/zsh -c 'readlink /proc/$$/exe > /dev/stdout'
/usr/bin/readlink

Ich vermute, dass die Bourne-kompatiblen Shells prüfen, ob der Aufruf als einzelne Anweisung ausgeführt werden kann, und wenn ja, verwenden sieexecvoder so ähnlich, anstatt die Shell tatsächlich aufzurufen.

Meine Fragen:

  • Ist mein Verdacht richtig? Wenn ja, was könnten die Motive dafür gewesen sein?
  • Kann ich dieses Verhalten deaktivieren?

verwandte Informationen