如果我有
$ x='This is a String'
$ export x
$ xterm &
[3] 14089
子进程似乎没有响应
$echo $x
$
更新: 我第一次导出变量时它似乎跨越了一个进程? -
$ export xb
[1]+ Done xterm
durrantm.../durrantm$ export xb
durrantm.../durrantm$
# Note second export didn't say anything.
答案1
一旦子进程被分叉,您就无法将父进程的环境导出到其任何子进程中。子级是分叉的外壳,当旋转时,它们会获得父级当时环境的副本。从那时起,他们就只能靠自己了。
在您的情况下,您在分叉之前设置变量,因此您应该看到在任何子项中设置的任何变量。不过,您似乎遇到了拼写错误。尝试echo $x
。
例子
在父外壳中:
$ x='This is a String'
$ export x
$ xterm &
[1] 28578
在 xterm 中:
$ echo $x
This is a String
变量被登录文件重置?
在某些罕见的情况下,您可能会遇到一个迷失变量set
,或者unset
它会消除父级的环境变量,使其无法干净地传递给任何子级。您可以按如下方式检查:
# login shell
$ bash -c -l 'echo $x'
This is a String
# interactive shell
$ bash -c -i 'echo $x'
This is a String
您还可以使用 Bash 的-x
开关,使上面的输出更加详细。
$ bash -x -c -i 'echo $x'