当前位置: 技术问答>linux和unix
为什么我的shell脚本执行了没效果?
来源: 互联网 发布时间:2016-09-16
本文导语: 脚本environment.linux.sh的内容如下(我已将注释都去掉): linuxbe_KERNEL_DIR=/Moxa/moxalinux/linux-2.6.x CROSSCOMPILER_DIR=/usr/local/arm-linux/bin IX_LINUX_CROSSCOMPILER=xscale-linux- IX_XSCALE_SW=/Moxa/moxalinux/modules/ixp400_xscale_sw PATH=/usr/bin:$CROSSCOMPI...
脚本environment.linux.sh的内容如下(我已将注释都去掉):
linuxbe_KERNEL_DIR=/Moxa/moxalinux/linux-2.6.x
CROSSCOMPILER_DIR=/usr/local/arm-linux/bin
IX_LINUX_CROSSCOMPILER=xscale-linux-
IX_XSCALE_SW=/Moxa/moxalinux/modules/ixp400_xscale_sw
PATH=/usr/bin:$CROSSCOMPILER_DIR:$PATH
IX_DEVICE=ixp43X
IX_PLATFORM=kixrp43x
IX_TARGET=linuxbe
export linuxbe_KERNEL_DIR HARDHAT_BASE IX_XSCALE_SW PATH IX_DEVICE IX_PLATFORM IX_TARGET
export IX_LINUX_CROSSCOMPILER
export IX_KBUILD_CROSSCOMPILE="KBUILD_MODPOST_WARN=1 ARCH=arm CROSS_COMPILE=${IX_LINUX_CROSSCOMPILER}"
此脚本信息:
-rwxr-xr-x 1 root root 2973 Aug 3 03:39 environment.linux.sh
我在root用户下执行:
#./environment.linux.sh
之后:
#env|grep IX
LANG=POSIX
并没有出现我希望export出来的环境变量,请问这是为何?谢谢!
PS:如果我一个个export这些变量都是可以的。
linuxbe_KERNEL_DIR=/Moxa/moxalinux/linux-2.6.x
CROSSCOMPILER_DIR=/usr/local/arm-linux/bin
IX_LINUX_CROSSCOMPILER=xscale-linux-
IX_XSCALE_SW=/Moxa/moxalinux/modules/ixp400_xscale_sw
PATH=/usr/bin:$CROSSCOMPILER_DIR:$PATH
IX_DEVICE=ixp43X
IX_PLATFORM=kixrp43x
IX_TARGET=linuxbe
export linuxbe_KERNEL_DIR HARDHAT_BASE IX_XSCALE_SW PATH IX_DEVICE IX_PLATFORM IX_TARGET
export IX_LINUX_CROSSCOMPILER
export IX_KBUILD_CROSSCOMPILE="KBUILD_MODPOST_WARN=1 ARCH=arm CROSS_COMPILE=${IX_LINUX_CROSSCOMPILER}"
此脚本信息:
-rwxr-xr-x 1 root root 2973 Aug 3 03:39 environment.linux.sh
我在root用户下执行:
#./environment.linux.sh
之后:
#env|grep IX
LANG=POSIX
并没有出现我希望export出来的环境变量,请问这是为何?谢谢!
PS:如果我一个个export这些变量都是可以的。
|
#. ./environment.linux.sh 这样试试!
|
这样才行
"脚本只能对它产生的子进程 export 变量.一个从命令行被调用的脚本export 的变量,将不能影响调用这个脚本的那个命令行 shell 的环境."
|
#. ./environment.linux.sh
等效于
#source ./environment.linux.sh
这样相当于将脚本展开,在当前SHELL中执行,则可以起到更改执行变量的目的
等效于
#source ./environment.linux.sh
这样相当于将脚本展开,在当前SHELL中执行,则可以起到更改执行变量的目的
|
#./environment.linux.sh
你一运行脚本 就启动了一个子进程
你在脚本里设置的环境变量只在这个子进程里有效
脚本执行完的时候子进程结束了 脚本里的环境变量以及别的变量也就消失鸟
所以你需要使用source或者.这样的bash内建命令 让他在当前shell中执行
你一运行脚本 就启动了一个子进程
你在脚本里设置的环境变量只在这个子进程里有效
脚本执行完的时候子进程结束了 脚本里的环境变量以及别的变量也就消失鸟
所以你需要使用source或者.这样的bash内建命令 让他在当前shell中执行