我们正在开发一个 shell(学校项目)。我们不理解一种行为。 为什么内置函数在重定向时不起作用?
喜欢
cd - | command
不改变目录。
或
export NAME=VALUE | command
不创建变量。
谢谢。
最佳答案
管道的链接在 fork 子 shell 中运行。
在 bash 中,您可以使用 $BASHPID 打印当前进程的 PID,例如:
self(){ echo $BASHPID; } ; self ; self >&2 | self; self
应该给你这样的东西:
12849
12851
12852
12849
中间两个 PID 不同于第一个和最后一个(母 shell)(在某些 shell 中,第一个或最后一个链接在母 shell 中运行,但不在 bash 中运行)。
在子 shell 中更改当前目录或导出值不会以任何方式影响父 shell。
关于带重定向的 shell 内置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293467/