我正在尝试使用我的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
时,它没有设置环境变量。
答案 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/153371和https://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bash,了解export
中bash
的更多说明。
答案 2 :(得分:3)
其他方法都不适用于我[source /path/to/file
vs . ./path/to/file
,别名等...],直到感谢this tutorial我发现使用了:
#!/usr/bin/env bash
shebang
而不是简单的#!/usr/bin/env
让我们将参数传递给解释器,我认为这是关键 - 请参阅this document以获取更多信息。
无论如何,如果任何形式的源命令都不适合你,请尝试检查你的shebang,这可能是问题:)