我是否可以从Bash脚本将变量导出到环境中,而无需对其进行寻源?
假设我有以下脚本: 导出.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
#! /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 "$@"'