[Toybox] Would someone please explain what bash is doing here?
Rob Landley
rob at landley.net
Sat May 23 10:11:39 PDT 2020
Starting to open the job control can of worms, and:
$ while true; do readlink /proc/self | cat - $$; done
24658
cat: 20032: No such file or directory
24660
cat: 20032: No such file or directory
24662
Is calling readlink and cat each time through the loop (true is a builtin), so
the pid advances by 2 and the pipeline is NOT a subshell. But:
$ echo hello | read i; echo $i
The read isn't saved because it's happening in a subshell context (so it sets an
i that is discarded)?
And then:
$ while true; do continue | readlink /proc/self; done
28555
28557
28559
28561
Is advancing the pid by 2 each time, because the _continue_ is in its own process?
$ while true; do continue | cat; echo hello; done
hello
hello
hello
$ while true; do break | cat; echo hello; done
hello
hello
hello
continue and break are silently NOP in a pipe?
Also, just confirming: $$ only shows the PID of the top level bash process, and
there's no variable that shows the PID of (subshells) even though the point of a
subshell is to spawn a new process?
Because unfortunately "what PID am I" turns out to be legitimately difficult to
answer from a subshell (or at least I couldn't figure it out):
https://landley.net/notes-2020.html#05-02-2020
Rob
P.S. this is old, but:
$ for i in a b c & do echo $i; done
bash: syntax error near unexpected token `&'
But break & is fine? What does that even _mean_?
More information about the Toybox
mailing list