shell命令中用source 和sh(或者bash)执行脚本的区别,以及export的作用

shell命令中用source 和sh(或者bash)执行脚本的区别,以及export的作用,第1张

用户登录到Linux系统后,系统将启动一个用户shell,我们暂且称这个shell为shell父。在这个shell父中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。

当使用sh或者bash运行shell脚本程序时,系统将创建一个子shell,我们暂且称为shell子。此时,系统中将有两个shell,一个是登录时系统启动的shell父,另一个是系统为运行脚本程序创建的shell子。

当一个脚本程序运行完毕,脚本shell子将终止,返回到执行该脚本之前的shell父。这时脚本中创建的变量或者环境变量(export的变量)是在shell子中创建的,只在shell子中有效,在shell父中是无法访问的source(或者.)的作用是文件包含,当使用source运行脚本程序时,系统并不会创建子shell,而是将脚本中的命令放到shell父中运行,这时脚本中创建的变量或者环境变量(export的变量)相当于是在shell父中创建的,在shell父中是可以访问的。

因此使用source执绝拆行修改后的配置文件会直春昌接生效,不需要重启export 的作用是为当前shell设置环境并森枣变量,这样变量在其子shell也可以访问,当然,在其父shell中还是无法访问的普通的变量只在当前shell中可以访问,在父shell或者子shell中都无法访问。

export 也是 bash 的一个内置命令。它主要是用来将父 shell 里的变量导出供子 shell 使用。

它有如下特征:

1. Linux export命令简介

Linux export命令用于设置或显示环境变量。

�œ.shell中执行程序时,shell会提供一组环境变量盯橡。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

Linux export命令简介

2. export参数

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

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

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

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。

Linux怎么设置变量环境

3. 在linux里设置环境变量的方法

一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/abc/123/bin”目录下,有如下三种方法来禅则山设置环境变量:

3.1 直接用export命令,临时生效

查看是否已经设好,可用命令export查看:

检贺中查:

输出结果:

declare -x HISTCONTROL="ignoredups"

declare -x HISTSIZE="1000"

declare -x HOME="/root"

declare -x HOSTNAME="zcwyou"

declare -x LANG="en_US.UTF-8"

declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"

declare -x LOGNAME="root"

declare -x LS_COLORS="rs=0:di=0134:ln=0136:mh=00:pi=4033:so=0135:do=0135:bd=403301:cd=403301:or=403101:mi=01053741:su=3741:sg=3043:ca=3041:tw=3042:ow=3442:st=3744:ex=0132: .tar=0131: .tgz=0131: .arc=0131: .arj=0131: .taz=0131: .lha=0131: .lz4=0131: .lzh=0131: .lzma=0131: .tlz=0131: .txz=0131: .tzo=0131: .t7z=0131: .zip=0131: .z=0131: .Z=0131: .dz=0131: .gz=0131: .lrz=0131: .lz=0131: .lzo=0131: .xz=0131: .bz2=0131: .bz=0131: .tbz=0131: .tbz2=0131: .tz=0131: .deb=0131: .rpm=0131: .jar=0131: .war=0131: .ear=0131: .sar=0131: .rar=0131: .alz=0131: .ace=0131: .zoo=0131: .cpio=0131: .7z=0131: .rz=0131: .cab=0131: .jpg=0135: .jpeg=0135: .gif=0135: .bmp=0135: .pbm=0135: .pgm=0135: .ppm=0135: .tga=0135: .xbm=0135: .xpm=0135: .tif=0135: .tiff=0135: .png=0135: .svg=0135: .svgz=0135: .mng=0135: .pcx=0135: .mov=0135: .mpg=0135: .mpeg=0135: .m2v=0135: .mkv=0135: .webm=0135: .ogm=0135: .mp4=0135: .m4v=0135: .mp4v=0135: .vob=0135: .qt=0135: .nuv=0135: .wmv=0135: .asf=0135: .rm=0135: .rmvb=0135: .flc=0135: .avi=0135: .fli=0135: .flv=0135: .gl=0135: .dl=0135: .xcf=0135: .xwd=0135: .yuv=0135: .cgm=0135: .emf=0135: .axv=0135: .anx=0135: .ogv=0135: .ogx=0135: .aac=0136: .au=0136: .flac=0136: .mid=0136: .midi=0136: .mka=0136: .mp3=0136: .mpc=0136: .ogg=0136: .ra=0136: .wav=0136: .axa=0136: .oga=0136: .spx=0136:*.xspf=0136:"

declare -x MAIL="/var/spool/mail/root"

declare -x OLDPWD

declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"

declare -x PWD="/root"

declare -x SELINUX_LEVEL_REQUESTED=""

declare -x SELINUX_ROLE_REQUESTED=""

declare -x SELINUX_USE_CURRENT_RANGE=""

declare -x SHELL="/bin/bash"

declare -x SHLVL="1"

declare -x SSH_CLIENT="113.105.164.145 6668 22"

declare -x SSH_CONNECTION="113.105.164.145 6668 113.105.164.151 22"

declare -x SSH_TTY="/dev/pts/0"

declare -x TERM="xterm"

declare -x USER="root"

declare -x XDG_RUNTIME_DIR="/run/user/0"

declare -x XDG_SESSION_ID="2185"

留意一下输出的这部分:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/abc/123/bin"

可以看到已经包括了刚刚设置的变量路径。

变量路径和环境Linux

3.2 修改profile文件,永久生效

把目录/opt/abc/123/bin在里面加入:

export PATH="

3.3 修改.bashrc文件,永久生效

在里面加入:

export PATH="PATH:/opt/abc/123/bin"¨K14K¨G3G在里面加入:exportPATH="PATH:/opt/abc/123/bin"

检查结果:

3.4 修改/etc/re.local文件,永久生效

在里面加入:

export PATH="

“/bin”、“/sbin”、“ /usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 export PATH:/opt/abc/123/bin"“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令exportPATH="路径”(或“PATH=

PATH为环境变量名,如DVSDK;调用时用

export DVSDK)可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可选:“/etc/profile”和用户主目录下的“.bashp​rofile”,“/etc/profile”对系统里所有用户都有效,用户主目录下的“.bashp​rofile”只对这个用户有效。exportPATH="

PATH:路径1:路径2:…:路径n" ),意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“

”。

注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议所有语句都添加在文件结尾,按软件的安装顺序添加。

本文已同步至博客站:

https://www.linuxrumen.com/cyml/859.html

function func (){

echo Func

}

export -f func

#使用export -f 参数导出氏逗函数。只用于bash

bash ./歼滑卖让庆a.sh


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12354691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存