簡體   English   中英

為什么某些帶有 pipe 的 bash 命令不起作用

[英]why some bash commands with pipe doesn't work

我正在嘗試實現我自己的 shell,基於export AAA=test | cat行為,我注意到有些命令不適用於管道,比如我有: export AAA=test | cat ,例如此命令不會將 AAA 添加到環境變量中,因此就像 export 不起作用,

但如果我寫: export | cat export | cat ,它將打印環境變量,所以在這里,它就像導出工作,與 exit, unset 一樣......所以有人可以向我解釋這種行為以及我如何實現它嗎?

export在這兩種情況下都在subshell中執行,其環境是父 shell 的副本。

export | cat export | cat ,您 cat 子外殼環境的內容,該內容未從從父級收到的副本修改,因此您得到的 output 與單獨export的 output 相匹配。

export AAA=test | cat export AAA=test | cat ,您修改子shell的環境,而不是調用shell。 此外,在這種情況下, export不會寫入任何 output 供cat讀取。 一旦 pipe 完成,子 shell 將被破壞,控制權恢復到當前的 shell,其環境未修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM