如何解决为什么一些带有管道的 bash 命令不起作用
我正在尝试基于 bash 行为实现我自己的 shell,但我注意到有些命令不适用于管道,
就像我有:export AAA=test | cat
,例如这个命令不会将 AAA 添加到环境变量中,所以就像导出不起作用一样,
但是如果我写:export | cat
,它将打印环境变量,所以在这里,它就像导出工作,
与退出相同,未设置....
那么有人可以向我解释这种行为以及我如何实施它吗?
解决方法
export
在这两种情况下都在 subshell 中执行,其环境是父 shell 的副本。
使用 export | cat
,您可以对子 shell 环境的内容进行分类,该内容未从从父级收到的副本中修改,因此您获得的输出与单独 export
的输出相匹配。
使用export AAA=test | cat
,您可以修改子shell 的环境,而不是调用shell。此外,在这种情况下,export
不会写入任何输出供 cat
读取。一旦管道完成,子shell就会被销毁,控制权恢复到当前shell,其环境没有被修改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。