BASH:将参数传递给子脚本

BASH:将参数传递给子脚本

我有一个这样的脚本:

#!/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}

相关内容