假设我有这样的脚本:

export.bash:

#! /usr/bin/env bash
export VAR="HELLO, VARIABLE"

当我执行脚本并试图访问$VAR时,我没有得到任何值!

echo $VAR

是否有一种方法通过执行export来访问$VAR。没有来源的Bash ?


当前回答

我不认为这可以做到,但我找到了一个使用别名的变通办法。只有当您将脚本放在scripts目录中时,它才会工作。否则,您的别名将具有无效的名称。

唯一的解决方法是能够在文件中使用同名函数,并且在使用它之前不必费心查找它。将以下代码添加到~/.bashrc文件中:

alias myFunction='unalias myFunction && . myFunction && myFunction "$@"'

您现在可以调用myFunction,而无需首先获取它。

其他回答

答案是否定的,但对我来说,我做了以下事情

脚本:

myExport

#! \bin\bash
export $1

我的.bashrc文件中的别名:

alias myExport='source myExport'

你仍然可以获取它,但也许这样它更有用,对其他人来说也更有趣。

我发现了一个从文件中导出环境变量的有趣而简洁的方法:

在文件env.vars中:

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

简单幼稚的方法有效:

脚本1:

回显"something" > /tmp/myvar

脚本2:

myvar=$(cat /tmp/myvar)

另一种变通方法(取决于具体情况)可能很有用:创建另一个继承导出变量的bash脚本。这是Keith Thompson回答的一个特例,所有这些缺点。

文件export.bash:

# !/bin/bash
export VAR="HELLO, VARIABLE"
bash

Now:

./export.bash
echo $VAR

这个变通方法在其他地方也有暗示,但可能不是那么清楚:

在脚本中,设置变量后,启动一个新的shell,而不是返回。

我的用例是,我有许多打开的终端,在其中一些终端中,我想要一些变量的值,而在其他终端中,我想要其他值。

由于使用source可能更难记住,这种方法的一个小优点是,当您需要一段时间才能意识到您忘记使用source时,您必须从头开始。

(对我来说,使用源脚本更有意义,因为缺失的变量会立即被注意到。)