[英]Pig 0.12.0 won't execute shell commands with timezone change using backticks
[英]Why commands executed inside backticks doesn't affect the current shell?
我知道反引號用於命令替換,但為什么這些命令不會影響當前的shell。 例如,執行以下命令會將當前工作目錄更改為我以前的目錄。
$> cd -
另一方面,以下命令會顯示我以前工作目錄的內容,但不會更改它。
$> ls `cd -`
同樣,可能還有其他例子
$>ls `PATH=""`
在這里,它確實顯示了我的工作目錄的內容,但PATH
變量沒有被更改。
反引號內的命令/表達式是否在子shell中執行?
子shell有不同的$BASHPID
的-它們fork
ED掉原來的殼。
$ echo $BASHPID; echo "`echo $BASHPID`"; echo $BASHPID
當您在Unix上進行分支時,子進程寫入時復制會從父進程繼承(或者只是通過急切復制繼承)數據。 子進程(子shell)可以讀取所有變量,但寫入任何變量將為子進程創建一個私有副本(或者如果內核不執行寫時復制操作,它已經有自己的副本) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.