[英]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.