|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!我本人也是一个菜鸟,打仗linux没有多久,比来在进修BASH的export下令时碰着了一个岂非(书上说export是将自界说变质变成体系情况变量):我在一个剧本文件中界说一个了变量,然后export变量,依照我本人的设法,实行完这个剧本后,在提醒符下必定能够用echo显现出它的值,可了局却不是如许,剧本实行完后用set基本看不到有这个变量存在。为何呢?我百思不得其解,最初将成绩贴出来,一名先辈告知我说用source+剧本文件就能够了,我试了一下公然能够,但一个新的成绩又出来了。我将剧本中export下令删除后,用source一样能够。那这个export仿佛没有甚么用呀。
在经由屡次实验后发明了一些器材,是我本人猜的,假如有甚么不合错误的中央,请斧正,感谢。
实行一个剧本时,会先开启一个子shell情况(不晓得实行别的步伐是否是如许),然后将父shell中的一切体系情况变量复制过去,这个剧本中的语句就在子shell中实行。(也就是说父shell的情况变量在子shell中能够挪用,但反过去就不可,假如在子shell中界说了情况变量,只对该shell大概它的子shell无效,当该子shell停止时,也能够了解为剧本实行完时,变量消散。)为了证实这一点,请看剧本内容:
如许的剧本实行完后,test实践上是不存在的。接着看上面的:
这里在剧本最初一行再开一个子shell,该shell应当是剧本文件地点shell的子shell,这个剧本实行完后,是能够看到test这个变量的,由于如今是处于它的子shell中,当用exit加入子shell后,test变量消散。
假如用source对剧本举行实行时,假如不加export,就不会在子shell中看到这个变量,由于它还不是一个体系情况变量呀,如剧本内容是:test=value用source实行后,在shell下是能看到这个变量,但再实行bash开一个子shell时,test是不会被复制到子shell中的,由于实行剧本文件实在也是在一个子shell中运转,以是我再建另外一个剧本文件实行时,是不会输出任何器材的,内容如:echo$test。以是这点出格注重了,明显在提醒符下能够用echo$test输入变量值,为何把它放进剧本文件就不可了呢?
以是得出的结论是:1、实行剧本时是在一个子shell情况运转的,剧本实行完后该子shell主动加入。2、一个shell中的体系情况变量才会被复制到子shell中(用export界说的变量);3、一个shell中的体系情况变量只对该shell大概它的子shell无效,该shell停止时变量消散(其实不能前往到父shell中)。3、不必export界说的变量只对该shell无效,对子shell也是有效的。
厥后依据版主的提醒,收拾了一下贴子:为何一个剧本间接实行和用source实行纷歧行呢?这也是我本人碰着的一个成绩。manual原文是如许的:Readandexecutecommandsfromfilenameinthecurrentshellenvironmentandreturntheexitstatusofthelastcommandexecutedfromfilename.分明了为何纷歧样了吧?间接实行一个剧本文件是在一个子shell中运转的,而source则是在以后shell情况中运转的。依据后面的内容,你也已分明个中的事理了吧。困扰了我几天的成绩终究能够美满的办理了。
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们! |
|