Left side of pipe is the subshell? Left side of pipe is the subshell? unix unix

Left side of pipe is the subshell?


From the bash man page: "Each command in a pipeline is executed as a separate process (i.e., in a subshell)." I suppose it would be possible to execute one component of a pipeline in the current shell (i.e. the first, or the last, or maybe one in the middle), it doesn't play favorites like this: they all execute in subshells. If you modify your script like this:

#!/bin/bashdeclare -i i=0function f1(){    let i++    echo "In f1, SUBSHELL: $BASH_SUBSHELL, i=$i" >&2}f1f1 | f1 | f1echo "at end, i=$i"

it prints:

In f1, SUBSHELL: 0, i=1In f1, SUBSHELL: 1, i=2In f1, SUBSHELL: 1, i=2In f1, SUBSHELL: 1, i=2at end, i=1

because all 3 invocations of f1 in the pipeline run in subshells.


Here is a much concise example if someone cares :

cd / && cd /tmp/ | pwd  ; pwd//

Or :

cd / && cd /tmp/ | cd /var/  ; pwd/

Yes this page says it all

http://linux.die.net/man/1/bash# Each command in a pipeline is executed as a separate process (i.e., in a subshell).