假设我有这样的脚本:
export.bash:
#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
当我执行脚本并试图访问$VAR时,我没有得到任何值!
echo $VAR
是否有一种方法通过执行export来访问$VAR。没有来源的Bash ?
假设我有这样的脚本:
export.bash:
#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"
当我执行脚本并试图访问$VAR时,我没有得到任何值!
echo $VAR
是否有一种方法通过执行export来访问$VAR。没有来源的Bash ?
当前回答
我有类似的问题调用ssh-agent -s在rsync的选项-e调用的脚本。
在脚本中,eval $(ssh-agent -s)不为下一次调用保留环境变量。
rsync -e 'source ssh-check-agent.sh -p 8022'不起作用,所以我做了一个变通方案。在脚本中,我在调用ssh-agent后将变量保存在一个临时文件中,如下:
echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK;" > /tmp/ssh-check-agent.vars
echo "export SSH_AGENT_PID=$SSH_AGENT_PID;" >> /tmp/ssh-check-agent.vars
然后在调用rsync (backup.sh)的脚本中调用:
source /tmp/ssh-check-agent.vars
问题是调用rsync的脚本必须由source (source backup.sh)调用。
我知道这不是问题(我使用两次源),但如果有人在rsync上有类似的问题,我在这里放了。
其他回答
如果你想为调用shell设置一个变量,有一个使用c unix套接字的健壮方法。 测试结果如下:
$ ./a.out &
[1] 5363
$ ./b.out 123;a=`./b.out`;echo ${a}
123
[1]+ Done ./a.out
参见我的github上的a.c, b.c和a.h。
这个变通方法在其他地方也有暗示,但可能不是那么清楚:
在脚本中,设置变量后,启动一个新的shell,而不是返回。
我的用例是,我有许多打开的终端,在其中一些终端中,我想要一些变量的值,而在其他终端中,我想要其他值。
由于使用source可能更难记住,这种方法的一个小优点是,当您需要一段时间才能意识到您忘记使用source时,您必须从头开始。
(对我来说,使用源脚本更有意义,因为缺失的变量会立即被注意到。)
执行
set -o allexport
在此之后,您从文件中获取的任何变量都将在您的shell中导出。
source conf-file
当你完成时执行。这将禁用alleexport模式。
set +o allexport
答案是否定的,但对我来说,我做了以下事情
脚本:
myExport
#! \bin\bash
export $1
我的.bashrc文件中的别名:
alias myExport='source myExport'
你仍然可以获取它,但也许这样它更有用,对其他人来说也更有趣。
另一种变通方法(取决于具体情况)可能很有用:创建另一个继承导出变量的bash脚本。这是Keith Thompson回答的一个特例,所有这些缺点。
文件export.bash:
# !/bin/bash
export VAR="HELLO, VARIABLE"
bash
Now:
./export.bash
echo $VAR