我有一个这样的脚本:
#!/bin/bash
. config
./sub-script
配置中有很多变量,我不想将它们传递给像./subscript arg1 arg2 ... arg100500
.
另外,我不喜欢source
从子脚本进行配置的想法,因为通常它可能不知道配置文件驻留在哪里。
还有其他方法可以使配置在子脚本中可用吗?
答案1
如果你可以这样设置你的脚本
#!/bin/bash
. config
. /path/to/sub-script
任何初始化的变量都config
应该可供主脚本及其来源的任何脚本使用。
解释
看来您的脚本正在启动一个新的非交互式 shell 进程,在父脚本中初始化的 shell 变量将不可用 - 但导出的环境变量应该可用于新的子进程。
答案2
你可以export
你的变量:
VAR=foo
export VAR
或者:
export VAR=foo
但是,这些变量在所有子流程的环境中都是可见的。
答案3
您可以将配置文件的完整路径名传递给子脚本。例如:
#!/bin/bash
. ./config
./sub-script ./config
然后子脚本可以执行如下操作:
cfg="$1"
shift
. "$cfg"
您甚至可以为 指定一个默认值$cfg
,以防万一$1
为空。
cfg=${1:-/path/to/default/config}