带重定向的 shell 内置

标签 shell unix

我们正在开发一个 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/

相关文章:

linux - 用于运行多个进程的 Shell 脚本

bash - 使用 shell 脚本捕获 Impala 中的错误

java - 对记录进行排序但在 Linux 和 Java 中将标题保持在顶部

C++ unix下递归复制目录

linux - 关闭窗口产生的信号?

linux - 通过按特定按钮停止脚本(在脚本处理它时收听 STDIN)

shell - shell 脚本中的反引号问题

linux - E138 : Can't write viminfo file $HOME/. 虚拟信息

linux - 如何在 Linux 中转义 scp 复制路径中的空格?

bash - 捕获 "rm: fts_read: No such file or directory"错误并继续