Learning Bash Book, bir alt kabuğun yalnızca ortam değişkenlerini ve dosya tanımlayıcılarını vb. Devralacağını ve dışa aktarılmayan değişkenleri devralmayacağını belirtir:
$ var=15
$ (echo $var)
15
$ ./file # this file include the same command echo $var
$
Bildiğim gibi, kabuk için ()
ve için iki alt kabuk oluşturacak ./file
, ancak bu ()
durumda neden alt kabuk, var
dışa aktarılmasa da değişkeni tanımlıyor ve ./file
durumda tanımlamıyor?
# Strace for ()
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25617
# Strace for ./file
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f24558b1a10) = 25631
Ben kullanmaya çalıştı strace
de çatallı süreç hem bu yollarla yani bu durumda anlamaya ve şaşırtıcı bunu bash klon sistemi arama için aynı argümanları kullanır bulundu ()
ve ./file
böylece neden ebeveynin aynı işlem adres alanı olmalıdır içinde ()
söz varible alt kabuğa görülebilir ve aynı için olmaz ./file
aynı argümanlar klon sistemi çağrısı dayanmaktadır rağmen, dava?