subshel​​l 和输入/输出重定向问题

subshel​​l 和输入/输出重定向问题

我有几个关于 shell i/o 行为的问题

echo apple | echo banana

这里的输出只是

banana

但在这个命令中:

echo apple | { echo banana; tail; }

输出是

banana
apple

为什么香蕉先出现在苹果之前?为什么苹果看起来不像第一个命令,发生了什么?

echo apple | { echo banana; rev; }

上面命令的输出是

banana
elppa

为什么苹果会被逆转,而不是香蕉?是因为echo banana; rev;同时执行吗?

echo apple >&2 | { echo banana; rev; }

上面命令的输出:

banana
apple

与之前的命令相比,这对我来说是有意义的,因为我们让 apple 转到错误输出并且rev只接受标准输出。

echo apple >&2 | { echo banana; rev; } | tac

输出:

apple
banana

我不确定为什么tac要颠倒行的顺序,它是否也考虑了错误输出?

{ echo apple >&2; echo banana; } | rev | tac

输出:

apple
ananab

我认为这里苹果没有得到,rev因为它是错误输出,而香蕉却得到了,但为什么会tac这样

相关内容