shell与export命令用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行

shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一

个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来

说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。

在子

shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内

的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。

export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

[例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。

dispfile脚本程序清单:

myfile=”List”

export myfile

echo “Displaying $myfile”

pr –t –n $myfile

printfile

printfile脚本程序清单:

echo “Printing $myfile”

lpr $myfile&

$dispfile

Displaying List

1 screen

2 modem

3 paper

Printing List

$

Linux 指令:系统设置--export 功能说明:设置或显示环境变量。

语  法:export [-fnp][变量名称]=[变量设置值]

补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。

参  数:

-f  代表[变量名称]中为函数名称。

-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。

-p  列出所有的shell赋予程序的环境变量。

http://linux.chinaitlab.com/command/723900.html

从学习export命令理解到的Shell环境和变量生存期

最近在学习BASH的export命令时碰到了一个难道(书上说export是将自定义变量变成系统环

境变量):我在一个脚本文件中定义一个了变量,然后export变量,按照我自己的想法,执行完这个脚本后,在提示符下一定可以用echo显示出它的值,

可结果却不是这样,脚本执行完后用set根本看不到有这个变量存在。为什么呢?我百思不得其解,最后将问题贴出来,一位前辈告诉我说用source+脚本

文件就可以了,我试了一下果然可以,但一个新的问题又出来了。我将脚本中export命令删除后,用source一样可以。那这个export好像没有什

么用呀。

在经过多次尝试后发现了一些东西,是我自己猜的,如果有什么不对的地方,请指正,谢谢。

执行一个脚本时,会先开启一个子shell环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这个脚本中的语句就在子

shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变量,只对该shell

或者它的子shell有效,当该子shell结束时,也可以理解为脚本执行完时,变量消失。)为了证明这一点,请看脚本内容:

test='value'

export test

这样的脚本执行完后,test实际上是不存在的。接着看下面的:

test='value'

export test

bash

这里在脚本最后一行再开一个子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原文是这样的:Read

and execute commands from filename in the current shell environment

and

return the exit status of the last command executed from

filename.明白了为什么不一样了吧?直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。根据

前面的内容,你也已经明白其中的道理了吧。

困扰了我几天的问题终于可以圆满的解决了。

转自:未知

linux 脚本的作用,shell export 作用相关推荐

  1. shell export 作用

    转自:http://www.cnblogs.com/zhangze/articles/1832542.html shell 与 export命令 用户登录到Linux系统后,系统将启动一个用户shel ...

  2. Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式

    本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond` Linux执行Scripts有两种方式,主要区别在于是否建立subshell ...

  3. linux脚本基本命令大全,Shell脚本常用命令

    Shell脚本常用命令 1           Shell中的特殊符号 1.1           $  美元符号.用来表示变量的值.如变量NAME的值为Mike,则使用$NAME就可以得到" ...

  4. linux 脚本 整数 赋值,shell基础!!熟悉编程规范与变量

    一.SHELL规范 SHELL简单介绍 Bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell.Bash 的全称为 Bourne Again Shell,是最受欢迎的开源软 ...

  5. 怎么编写Linux脚本循环语句,shell脚本及常用循环语句

    博文结构 什么是shell 简单编辑shell 循环语句 一.什么是shell及作用 Shell字面理解就是个"壳",是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用 ...

  6. linux脚本编写规则,shell脚本编写守则

    现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS L ...

  7. linux脚本文件编辑器,Shell文件编辑器

    文件编辑器,允许在文件中插入.编辑和替换文本等操作. 本文主要针对vim编辑器和nano编辑器的使用做简单记录,目前macOS是支持这两种编辑器的. vim编辑器 vi编辑器是Unix系统最初的编辑器 ...

  8. linux 脚本 获取pid,Shell脚本中获取进程ID的方法

    提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将she ...

  9. linux脚本添加source,shell中的source命令的巧妙用法

    首先,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录.例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如sourc ...

最新文章

  1. anaconda -spyder报错解决-UnicodeDecodeError: 'gbk' codec can't decode byte 0x93 in position 611: illegal
  2. 【一周论文速递】自然语言处理最新论文!
  3. 值类型与引用类型的区别
  4. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】
  5. 普林斯顿算法(1.3)并查集(union-find算法)——本质就是一个数 下面的子树代表了连在一起的点...
  6. EC笔记:第二部分:11:在operator=中处理“自我赋值”
  7. 开源的视频笔记合集: 陌溪 / LearningNotes
  8. IntelliJ IDEA 使用 LiveEdit 插件实现实时可视化前端开发
  9. php常见数据类型转换与判断
  10. java调用lingo_使用Lingo增强JMS
  11. 单片机小精灵t2_搭建S5P4418 ARM环境下 GPU OPENGL ES开发环境(适用 NANOPI2,3,M2,M3,T2,T3)...
  12. 数字校园项目-学生失联预警系统(二)-----项目部署
  13. 抛出这8个问题,检验一下你到底会不会ThreadLocal,来摸个底~
  14. 开源:秋式广告杀手源码
  15. 安装虚拟机(二)配置静态ip
  16. linux安装jdk8
  17. 2022年产品经理考这个证书绝对超值(NPDP)
  18. 为什么SAST和SCA在SDLC中很重要?
  19. 服务器负载过高的处理方式
  20. HikariCP数据库连接配置详解

热门文章

  1. 2022-2028年中国TAC薄膜行业市场全景评估及投资前景规划报告
  2. GCC 连接器、链接标准库 gcc -l、链接手动创建库(指定目录的库 gcc -L)
  3. 【J2SE】java概述
  4. 【B/S实践】解决:vs中修改样式表后不起作用的问题
  5. 文化内涵和历史深度:PC
  6. 带你彻彻底底搞懂朴素贝叶斯公式
  7. pytorch.range() 和 pytorch.arange() 的区别
  8. PLsql连接centos7上的Oracle的连接超时的解决方发
  9. 8086汇编语言精华笔记总结~
  10. AI框架精要:设计思想