为什么一些 bash 管道命令不起作用
why some bash commands with pipe doesn't work
我正在尝试根据 bash 行为实现我自己的 shell,我注意到有些命令不适用于管道,
就像我有:export AAA=test | cat
,例如这个命令不会将 AAA 添加到环境变量,所以它就像导出不起作用,
但是如果我写:export | cat
,它会打印环境变量,所以在这里,就像导出工作一样,
与 exit, unset ....
那么有人可以向我解释这种行为以及我如何实现它吗?
export
在这两种情况下都在 subshell 中执行,其环境是父 shell 的副本。
使用 export | cat
,您可以捕获子 shell 环境的内容,该内容未根据从父级收到的副本进行修改,因此您获得的输出与 export
一个人就有输出。
使用 export AAA=test | cat
,您修改子 shell 的环境,而不是调用 shell。此外,在这种情况下,export
不会写入任何供 cat
读取的输出。管道完成后,subshell 将被销毁,控制权将恢复到当前 shell,其环境未被修改。
我正在尝试根据 bash 行为实现我自己的 shell,我注意到有些命令不适用于管道,
就像我有:export AAA=test | cat
,例如这个命令不会将 AAA 添加到环境变量,所以它就像导出不起作用,
但是如果我写:export | cat
,它会打印环境变量,所以在这里,就像导出工作一样,
与 exit, unset ....
那么有人可以向我解释这种行为以及我如何实现它吗?
export
在这两种情况下都在 subshell 中执行,其环境是父 shell 的副本。
使用 export | cat
,您可以捕获子 shell 环境的内容,该内容未根据从父级收到的副本进行修改,因此您获得的输出与 export
一个人就有输出。
使用 export AAA=test | cat
,您修改子 shell 的环境,而不是调用 shell。此外,在这种情况下,export
不会写入任何供 cat
读取的输出。管道完成后,subshell 将被销毁,控制权将恢复到当前 shell,其环境未被修改。