a.sh
#! /bin/sh
export x=/usr/local
我们可以在命令行中执行source ./a
。但是我需要通过shell脚本进行导出。
b.sh
#! /bin/sh
. ~/a.sh
没有错误...但是命令行中的$x
什么也不显示。所以它没有被导出。
有办法让它工作吗?
a.sh
#! /bin/sh
export x=/usr/local
-----------
admin@client: ./a.sh
admin@client: echo $x
admin@client: <insert ....>
6条答案
按热度按时间xzv2uavs1#
您可以将export语句放在shell脚本中,然后使用“source”命令 * 在当前进程中执行它 *:
bttbmeg02#
不能通过shell脚本进行导出,因为shell脚本在子shell进程中运行,并且只有子shell的子进程才能继承导出。
使用source的原因是让当前shell执行命令
将导出命令放在.bashrc文件中是很常见的,bash将在启动时获取该文件(或其他shell的类似文件)
另一个想法是,您可以创建一个shell脚本,它生成一个导出命令作为其输出:
然后让当前shell执行该输出
(note在其上方,脚本的调用用反勾号包围,以使shell * 执行 * 脚本的输出)
628mspwn3#
用上面的答案回答我自己的问题:如果我有多个相关变量要导出,并且每个导出都使用相同的值,我可以这样做:
并另存为,例如~/桌面/测试导出
最后是
$chmod +x ~/Desktop/TEST_EXPORTING
然后,使用
source ~/Desktop/TEST_EXPORTING bob
运行它然后使用
export | grep bob
进行检查,应该会显示您所期望的内容。2j4z5cfb4#
将变量导出到环境中只会使该变量对子进程可见。子进程无法修改其父进程的环境。
6pp0gazn5#
另一种方法(借用/详细说明上面的想法)是将脚本放在~/bin中,并确保~/bin在PATH中,然后就可以全局访问变量了,这只是我编译Go语言源代码时使用的一个例子,它需要GOPATH变量指向当前目录(假设你位于要编译源代码的目录中):
来自~/bin/GOPATH:
那你就这么做
因此,您现在也可以在其他脚本中使用$(GOPATH),例如自定义构建脚本,它可以自动调用此变量并通过$(pwd)动态声明它。
polhcujo6#
script1.sh
script2.sh
x一个一个一个一个x一个一个二个x
对于在同一个父shell中运行的脚本,它将持续存在,并防止冲突。