我有多个 Amazon EC2 账户,并且希望能够$EC2_HOME
使用脚本快速切换变量,例如 。
我有一个像这样设置的 shell 脚本:
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
当我运行脚本时,我知道它EC2_HOME
已设置,但我认为使用export
会使变量在脚本完成后保留下来。它没有,因为运行echo $EC_HOME
不会显示任何内容。
我知道这一定是非常初级的Linux脚本知识,但我不知道。我尝试寻找相关问题,但没有运气 - 所以如果这是重复的,我很抱歉。
答案1
你应该使用你的脚本
. ./script
或者
source ./script
答案2
当您运行脚本时,它会获得自己的 shell 和环境,一旦脚本完成,它们就会再次消失。要保留环境变量,请将脚本放入当前 shell 中:
$ source ./a.sh
或等效地(但更便携)使用POSIX 点命令:
$ . ./a.sh
然后,这些定义将被放入您当前的 shell 环境中,并由您从中启动的任何程序继承。
为了更接近运行脚本,将通过搜索环境变量. a.sh
中的目录来找到a.sh。PATH
.
它们的行为方式以及和是否source
相同(或根本存在)存在一些微妙之处。. ./a.sh
在每个 POSIX 兼容 shell 中肯定会有相同的行为,但是source
and .
、. a.sh
and . ./a.sh
、 可能会有所不同。对于重击source
并且.
是相同的在所有情况下;为了zshsource
总是首先检查当前目录; ksh 本质上是类似的。
如果脚本名称以路径形式给出(包含/
),则在所有情况下都直接使用该路径。最可移植可靠的事情是. ./script
or . /path/to/script
。
答案3
只是为了记录。
如果您想从互联网运行脚本,将环境导出到系统
您可以使用以下格式
source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)
例如:
source <(curl -s -L https://example.com/install.sh)
答案4
尝试
exec ./script
exec 命令在当前 shell 中运行脚本,而不启动非交互式 shell。