我使用 csh 脚本来实现某些自动化目的。我有许多脚本,在所有脚本的开头我需要设置一组固定的环境变量。
|----SCRIPT 1---| |----SCRIPT 2---|
|# set env vars | |# set env vars |
| | | |
|# do something | |# do something |
| | |# else |
所以我想将所有环境变量放在另一个脚本中并从每个文件中获取它。但事实证明,源脚本内部设置的环境变量不会反映在外部。有什么干净的方法来实现我想要的吗?或者我是否必须在每个脚本中显式设置环境变量?
更新 :
在获取文件时,我使用“tee”命令将输出传输到文件。我注意到移除管道后,脚本文件起作用了。
答案1
是的,管道输出source
将在子 shell 中运行管道的该部分,这意味着由其他文件的来源设置的任何环境变量都不会影响脚本的环境。
例子:
environment.csh
:
setenv string "hello world"
echo 'The environment is now set up'
script.csh
:
#!/bin/csh
source environment.csh | tee output
printf 'string is "%s"\n' "$string"
运行的输出script.csh
将是
The environment is now set up
string: Undefined variable.
移除管道即可tee
使其输出
The environment is now set up
string is "hello world"