我是否可以从Bash脚本将变量导出到环境中,而无需对其进行寻源?

我是否可以从Bash脚本将变量导出到环境中,而无需对其进行寻源?,bash,shell,unix,environment-variables,Bash,Shell,Unix,Environment Variables,假设我有以下脚本: 导出.bash: #! /usr/bin/env bash export VAR="HELLO, VARIABLE" 当我执行脚本并尝试访问$VAR时,我没有得到任何值 echo $VAR 是否有一种方法可以访问$VAR,只需执行export.bash,而无需对其进行寻源?为了首先导出VAR变量,最合乎逻辑和最合适的工作方式是对变量进行寻源: $ cat set-vars2.sh #!/bin/bash echo export FOO=BAR $ ev

假设我有以下脚本:

导出.bash

#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
当我执行脚本并尝试访问
$VAR
时,我没有得到任何值

echo $VAR

是否有一种方法可以访问
$VAR
,只需执行export.bash,而无需对其进行寻源?

为了首先导出VAR变量,最合乎逻辑和最合适的工作方式是对变量进行寻源:

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR
/export.bash

source./export.bash
现在,当从主外壳发出回声时,它可以工作:

echo$VAR
你好,VARIABLE
我们现在将重置VAR:

export VAR=“”
echo$VAR
现在,我们将执行一个脚本来获取变量的源代码,然后将其取消设置:

/test-export.sh
你好,VARIABLE
--
.
代码:test-export.sh文件

这里有一个方法:

请注意:导出仅限于在主控制台中执行导出的脚本-就作业而言,我会像下面的控制台一样添加它。。。对于仍有疑问的命令部分:以下是如何从shell运行:

在命令提示下(只要export.bash文件有多个echo值)

IFS=$'\n';对于美元(./export.bash)中的条目;不输出$条目;完成/v1.sh
你好
你好
文件cat v1.sh
#/bin/bash
echo$VAR
echo$VAR1
现在,只要这是供您使用的,您就可以通过执行如下Bash别名,随时为脚本提供变量:

myvars./v1.sh
你好
你好
echo$VAR
.
将此添加到您的:

您的.bashrc文件,并且您可以随时执行上述操作

无论如何,回到剩下的部分

这使它在全局可用,然后执行脚本

只需将其回显并在回显上运行导出

文件export.bash 现在在脚本或控制台中运行:

export "$(./export.bash)"
尝试:

echo$VAR
你好
多个值,只要您知道使用上述方法在另一个脚本中需要什么:

文件export.bash 文件test-export.sh 现在是结果

/test-export.sh
第一轮
你好
你好
第二轮
.
最后更新为自动分配时,读取变量:

/test-export.sh
第0轮-导出,然后查找变量名-
将当前变量设置为导出的变量,然后回显其值
$VAR的值为HELLO
$VAR1的值为HI
第1轮-我们知道导出的是什么,我们将回显已知变量
你好
你好
第二轮-我们只返回变量名并取消设置
第三轮-现在我们什么都没有得到
剧本:

文件test-export.sh
为了首先导出VAR变量,最合乎逻辑和最合适的工作方式是源变量:

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR
/export.bash

source./export.bash
现在,当从主外壳发出回声时,它可以工作:

echo$VAR
你好,VARIABLE
我们现在将重置VAR:

export VAR=“”
echo$VAR
现在,我们将执行一个脚本来获取变量的源代码,然后将其取消设置:

/test-export.sh
你好,VARIABLE
--
.
代码:test-export.sh文件

这里有一个方法:

请注意:导出仅限于在主控制台中执行导出的脚本-就作业而言,我会像下面的控制台一样添加它。。。对于仍有疑问的命令部分:以下是如何从shell运行:

在命令提示下(只要export.bash文件有多个echo值)

IFS=$'\n';对于美元(./export.bash)中的条目;不输出$条目;完成/v1.sh
你好
你好
文件cat v1.sh
#/bin/bash
echo$VAR
echo$VAR1
现在,只要这是供您使用的,您就可以通过执行如下Bash别名,随时为脚本提供变量:

myvars./v1.sh
你好
你好
echo$VAR
.
将此添加到您的:

您的.bashrc文件,并且您可以随时执行上述操作

无论如何,回到剩下的部分

这使它在全局可用,然后执行脚本

只需将其回显并在回显上运行导出

文件export.bash 现在在脚本或控制台中运行:

export "$(./export.bash)"
尝试:

echo$VAR
你好
多个值,只要您知道使用上述方法在另一个脚本中需要什么:

文件export.bash 文件test-export.sh 现在是结果

/test-export.sh
第一轮
你好
你好
第二轮
.
最后更新为自动分配时,读取变量:

/test-export.sh
第0轮-导出,然后查找变量名-
将当前变量设置为导出的变量,然后回显其值
$VAR的值为HELLO
$VAR1的值为HI
第1轮-我们知道导出的是什么,我们将回显已知变量
你好
你好
第二轮-我们只返回变量名并取消设置
第三轮-现在我们什么都没有得到
剧本:

文件test-export.sh 有没有办法只通过执行
export.bash
而不获取
$VAR
来访问它

快速回答:没有

但有几种可能的解决办法

您已经提到的最明显的一个是使用
source
在调用shell的上下文中执行脚本:

$ cat set-vars1.sh 
export FOO=BAR
$ . set-vars1.sh 
$ echo $FOO
BAR
另一种方法是让脚本打印将设置环境变量的命令,而不是设置环境变量:

$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR
第三种方法是使用脚本在内部设置环境变量,然后使用该环境调用指定命令:

$ cat set-vars3.sh
#!/bin/bash
export FOO=BAR
exec "$@"
$ ./set-vars3.sh printenv | grep FOO
FOO=BAR
最后一种方法可能非常有用,尽管它不便于交互使用,因为它没有为您提供当前shell中的设置(以及所有其他shell)
$ cat set-vars1.sh 
export FOO=BAR
$ . set-vars1.sh 
$ echo $FOO
BAR
$ cat set-vars2.sh
#!/bin/bash
echo export FOO=BAR
$ eval "$(./set-vars2.sh)"
$ echo "$FOO"
BAR
$ cat set-vars3.sh
#!/bin/bash
export FOO=BAR
exec "$@"
$ ./set-vars3.sh printenv | grep FOO
FOO=BAR
#! \bin\bash
export $1
alias myExport='source myExport'
# !/bin/bash
export VAR="HELLO, VARIABLE"
bash
./export.bash
echo $VAR
foo=test
eval `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # =>

export eval `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # => test

# a better one. "--" stops processing options,
# key=value list given as parameters
export -- `cat env.vars`
echo $foo         # => test
sh -c 'echo $foo' # => test
# set my env
[ -s ~/.env ] && export MYENV=`cat ~/.env`
function myenv() { [[ -s ~/.env ]] && echo $argv > ~/.env && export MYENV=$argv }
set -o allexport
source conf-file
set +o allexport
alias myFunction='unalias myFunction && . myFunction && myFunction "$@"'