Bash Restrict父脚本命令行参数转发到子脚本参数

时间:2016-08-23 08:29:53

标签: linux bash shell

我们有父bash脚本

parent_source.bash

#!/bin/bash

source child_test.bash

在child_test.bash里面

echo $@ 
#Doing some validation checks for $@, for child_script command line arguments are optional

执行时的位置

 source parent_source.bash one two

子脚本在$ @中使用“one”和“two”,因此验证失败,不考虑给予子脚本的零参数。子脚本假设它有2个命令行参数。

但是,如果我们为孩子提供命令行参数它也正常工作。

有人可以帮助我们吗

由于

3 个答案:

答案 0 :(得分:0)

执行source命令时,实际上将child_test.bash的内容注入parent_source.bash脚本,然后执行child_test.bash中的第一行,即:

echo $@

它实际上是指传递给父脚本的参数,因为命令的范围实际上在parent_source.bash脚本上。

我建议在不将内容注入父脚本的情况下执行脚本。

这样的事情:

<强> parent_source.bash

#!/bin/bash

./child_test.bash

<强> child_test.bash

echo $@ 
#Doing some validation checks for $@, for child_script command line arguments are optional

答案 1 :(得分:0)

您缺少$@选项,可将parent_source.bash的值传递给child_test.bash

parent_source.bash

#!/bin/bash

source child_test.bash $@

在child_test.bash里面

echo $@ 

执行时的位置

 source parent_source.bash one two

答案 2 :(得分:0)

由于source来自父级的子脚本,父脚本的shell环境也会传播到子脚本的内容。 因此,可以使用父脚本的参数,并在子脚本上使用$@进行扩展。

您可以将参数保存到数组中的父脚本,然后在获取子脚本之前取消设置位置参数,以防止它们对子项可用。因此,您的父脚本可以采用以下形式:

args=( $@ )
set --
source child_test.sh