در متن زیر منظور از calling shell چی هستش ؟
در مورد تفاوت 4رم منظورش از shell's language زبان برنامه نویسی هست یا چیزه دیگه ای هست ؟
■When you source a script, it will have access to environment variables set in the calling
shell, even if you haven’t exported them. Ordinarily, only environment variables that
you explicitly export become available to scripts you run.
■ If you source a script and if that script sets an environment variable, that variable will
become available (or will be changed) in the calling shell. If you run the script nor-
mally, any environment variables it sets will remain local to it and to the programs that
it calls, even if the script exports the variables.
■ Running a script in the normal ways imposes overhead costs associated with launching
the new shell. These costs are normally negligible, but if a script calls itself recursively
or calls many other scripts, sourcing those scripts within the fi rst script may improve
performance.
■ Sourcing a script causes it to execute in the calling shell’s language, whereas running a
script normally causes it to use the shell language specified on the hashbang line.
سلام
سوال قشنگی پرسیدی باعث شد برم دنبال source ببینم چیه.
اول بگم که قبلا با source کار نکردم و کتاب هم نخوندم پس ممکنه اشتباه بگم . هدف اینه دور هم باشیم :دی و به نتیجه برسیم
در مورد سوال اولت ، calling shell دقیقا همون محیطیه که تو به عنوان کاربر دستورتو توش ران کردی. دقیق تر بگم. وقتی میگه calling shell ، یعنی اون shellی که دستور source رو ران کرده.
مثلا تو این دستور رو اجرا میکنی:
sh myscript.sh
پس اسکریپت از بالا شروع میشه به اجرا شدن . میرسه به دستور:
source something.sh
یعنی کسی که something رو call کرده ، اسکریپت myscript بوده . پس calling shell میشه همون shellی که myscript داره توش ران میشه
امیدوارم درست توضیح داده باشم و واضح
سوال دومت که درباره ی قسمت ۴امه.
کلا میگه اگر از دستور source استفاده کنیم باعث میشه که اسکریپی که اون رو source کردیم، با زبان calling shell اجرا بشه نه زبان خودش
فکر کنم مثال بزنم بهتره
#!/bin/bash
source /home/blah blah/something.sh
echo "hi"
در این مثال از دستور source استفاده شده برای اجرای somethin.sh . یعنی که کدهای توی something.sh دارن با زبان calling shell اجرا میشن. توی خط اول هم نوشتیم bin/bash/!# . پس یعنی کدهای توی something.sh دارن با bin/bash/ اجرا میشن .
در حالت دوم که از دستور source استفاده نکنیم:
#!/bin/bash
./home/blah blah/something.sh
echo "hi"
در این حالت دیگه کاری نداره که زبان پدرش یعنی calling shell چیه. میره خود کد رو اجرا میکنه! ممکنه کد به هر طریقی اجرا شده باشه
موفق باشی