![](/img/trans.png)
[英]How can I reference non-exported Linux kernel functions from a kernel module?
[英]If bash pipeline commands run in subshell, why echo command can access the non-exported variables?
Bash 手冊說“管道中的每個命令都作為單獨的進程(即,在子外殼中)執行”。 我測試了兩個簡單的命令。
cd /home/work
str=hello
echo $str | tee a.log
它輸出:
hello
似乎 echo 命令沒有在子 shell 中執行,因為它可以訪問未導出的變量$str
。
cd /home/work
cd src | pwd
pwd
它輸出:
/home/work
看起來 cd 命令是在子 shell 中執行的,因為它不會影響原始 shello 的工作目錄。
誰能解釋為什么行為不一致?
誰能解釋為什么行為不一致?
好吧,因為這就是它的設計方式。 “子shell”繼承了整個上下文,而不僅僅是導出的變量。
Bash 手冊說“管道中的每個命令都作為單獨的進程執行(即在子外殼中)”
Bsah 手冊可在此處獲得。 你提到的那句話字面上有一個解開謎團的鏈接:
管道中的每個命令都在其自己的子 shell 中執行,這是一個單獨的進程(請參閱命令執行環境)。
然后您可以從中檢查“命令執行環境”(強調我的):
shell有一個執行環境,包括以下內容:
- ...
- shell 通過變量賦值設置的參數...
- ...
...
命令替換、用括號分組的命令和異步命令在與 shell 環境重復的子 shell 環境中調用,...
子shell 擁有所有環境(好吧,除了陷阱)。 另一方面命令:
當要執行除內置命令或 shell function 以外的簡單命令時,將在包含以下內容的單獨執行環境中調用它。 ……
- ...
- shell 標記為導出的變量和函數,...
如果 bash 管道命令在 subshell 中運行,為什么 echo 命令可以訪問未導出的變量?
因為子shell繼承了父環境,包括所有未導出的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.