13

我正在尝试从我的 bash 脚本中获取带有环境变量的文件,但它不起作用。

这是我的脚本 ( test.sh) 的内容,它位于~/scripts/test.sh.

#!/bin/bash
FILE_NAME=/tmp/source_file
touch $FILE_NAME
echo "export TEST=\"test\"" > $FILE_NAME
source $FILE_NAME

然后我aliasmy ~/.bashrc.

alias testScript=~/scripts/test.sh

但是当我使用我的脚本时testScript,它没有设置环境变量。

4

3 回答 3

11

你需要使用:

alias testScript=". ~/scripts/test.sh"

源文件。或者您可以使用source代替.,但我不太喜欢 C shell,所以我不使用 C shell 符号,例如source.

于 2013-10-27T18:06:41.417 回答
9

环境变量仅在流程树中向下游流动。

当您键入testScriptbash 进程时,它会创建一个子进程和 execs/bin/bash或由#!

在那里设置的任何环境变量只保留在子进程中。导出会导致将变量复制到可能从该子代产生的其他孙代(该子代的子代)。

没有任何东西可以复制回父级。您需要使用源而不是运行文件。请参阅乔纳森的回答。

您可以尝试编辑文件 ~/.bashrc~/.login设置您经常需要的环境变量。

有关in的更多说明,另请参见https://superuser.com/q/153371https://superuser.com/questions/18988/difference-between-ab-and-export-ab-in-bashexportbash

于 2013-10-27T18:02:47.707 回答
4

没有其他方法对我有用 [ source /path/to/filevs . ./path/to/file,别名等...],直到感谢本教程,我发现使用:

#!/usr/bin/env bash社邦

而不是更简单的#!/usr/bin/env让参数传递给解释器,我认为这是这里的关键 - 请参阅此文档以获取更多信息。

无论如何,如果任何形式的源命令都不适合您,请尝试检查您的 shebang,这可能是问题所在:)

于 2016-08-21T01:27:59.427 回答