仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 782|回复: 8
打印 上一主题 下一主题

[shell编程] 来一发从Export了解Shell情况和变量保存期

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:22:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!我本人也是一个菜鸟,打仗linux没有多久,比来在进修BASH的export下令时碰着了一个岂非(书上说export是将自界说变质变成体系情况变量):我在一个剧本文件中界说一个了变量,然后export变量,依照我本人的设法,实行完这个剧本后,在提醒符下必定能够用echo显现出它的值,可了局却不是如许,剧本实行完后用set基本看不到有这个变量存在。为何呢?我百思不得其解,最初将成绩贴出来,一名先辈告知我说用source+剧本文件就能够了,我试了一下公然能够,但一个新的成绩又出来了。我将剧本中export下令删除后,用source一样能够。那这个export仿佛没有甚么用呀。
在经由屡次实验后发明了一些器材,是我本人猜的,假如有甚么不合错误的中央,请斧正,感谢。
实行一个剧本时,会先开启一个子shell情况(不晓得实行别的步伐是否是如许),然后将父shell中的一切体系情况变量复制过去,这个剧本中的语句就在子shell中实行。(也就是说父shell的情况变量在子shell中能够挪用,但反过去就不可,假如在子shell中界说了情况变量,只对该shell大概它的子shell无效,当该子shell停止时,也能够了解为剧本实行完时,变量消散。)为了证实这一点,请看剧本内容:
  1. test=valueexporttest
复制代码
如许的剧本实行完后,test实践上是不存在的。接着看上面的:
  1. test=valueexporttestbash
复制代码
这里在剧本最初一行再开一个子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教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
再见西城 该用户已被删除
沙发
发表于 2015-1-16 15:38:38 | 只看该作者

来一发从Export了解Shell情况和变量保存期

选择交流平台,如QQ群,网站论坛等。
板凳
发表于 2015-1-19 10:33:52 | 只看该作者
笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-28 06:17:09 | 只看该作者
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
飘飘悠悠 该用户已被删除
5#
 楼主| 发表于 2015-2-5 20:29:34 | 只看该作者
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
山那边是海 该用户已被删除
6#
发表于 2015-2-13 13:16:14 | 只看该作者
和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。
小女巫 该用户已被删除
7#
发表于 2015-3-3 21:59:29 | 只看该作者
当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。
飘灵儿 该用户已被删除
8#
发表于 2015-3-11 14:18:00 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-19 01:33:40 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-5 23:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表