如何从bash脚本中获取文件

时间:2013-10-27 17:58:26

标签: linux bash shell environment-variables

我正在尝试使用我的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

然后我在alias中使用my ~/.bashrc

alias testScript=~/scripts/test.sh

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

3 个答案:

答案 0 :(得分:10)

您需要使用:

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

来源文件。或者您可以使用source代替.,但我不太喜欢C shell,因此我不使用source等C shell表示法。

答案 1 :(得分:9)

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

当您向bash流程输入testScript时,它会创建子流程并执行/bin/bash#!

设置的任何内容

此处设置的任何环境变量仅保留子进程。导出会将变量复制到可能从该子项中生成的其他孙子孙女(该孩子的子女)。

没有任何东西可以复制回父母。您需要使用source而不是运行该文件。见Jonathan的回答。

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

另请参阅https://superuser.com/q/153371https://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bash,了解exportbash的更多说明。

答案 2 :(得分:3)

其他方法都不适用于我[source /path/to/file vs . ./path/to/file,别名等...],直到感谢this tutorial我发现使用了:

#!/usr/bin/env bash shebang

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

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