লার্নিং ব্যাশ বুক উল্লেখ করেছে যে একটি সাবশেল কেবল পরিবেশের ভেরিয়েবল এবং ফাইল বর্ণনাকারী ইত্যাদির উত্তরাধিকারী হবে এবং এটি রফতানি না হওয়া ভেরিয়েবলের উত্তরাধিকারী হবে না:
$ var=15
$ (echo $var)
15
$ ./file # this file include the same command echo $var
$
আমি জানি যে শেলটি তার জন্য ()
এবং এর জন্য দুটি সাবস্কেল তৈরি করবে ./file
, তবে কেন ()
ক্ষেত্রে সাবসেল var
চলকটি রফতানি না করা সত্ত্বেও এটি ./file
সনাক্ত করতে পারে এবং ক্ষেত্রে এটি সনাক্ত করে না কেন?
# 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
আমি ব্যবহার করার চেষ্টা strace
করে উভয় forked প্রক্রিয়া জিনিসটা কিভাবে এই ঘটে আশ্চর্যজনক আমি দেখেছি যে ব্যাশ ক্লোন সিস্টেম কল জন্য একই আর্গুমেন্ট ব্যবহার করবে, তাই এই উপায়ে ()
এবং ./file
পিতা বা মাতা একই প্রক্রিয়া অ্যাড্রেস স্পেস থাকতে হবে, তবে কেন মধ্যে ()
কেস subshell কাছে দৃশ্যমান varible এবং একই জন্য ঘটবে না ./file
যদিও একই আর্গুমেন্ট ক্লোন সিস্টেম কল উপর ভিত্তি করে তৈরি, কেস?