如何从脚本1调用脚本2及其2个参数而不对脚本1进行任何更改?

时间:2016-02-12 00:49:55

标签: linux bash shell

我有两个脚本。

1)script1.sh - >它只会调用script2.sh并保留日志和时间等。我无法对script1.sh进行任何更改。它仅用于调用script2.sh

2)script2.sh - >它只是一个命令,可以将一个文件从特定位置加载到另一个位置。我将位置1的文件名作为参数1和文件名传递给位置2作为参数2。

script2.sh:

file1=$1
file2=$2

/home/test put /home/$1 uploads/final/$2

我运行的最终脚本是:

script1.sh script2.sh file1=abc.csv file2=xyz.csv

但不知怎的,我不能使用被调用脚本的参数2.有没有办法可以使用被调用脚本2的参数而无需更改脚本1.

对此有任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

script2.sh无法访问script1.sh提供的参数。如果script1.sh没有将参数传递给script2.sh,则可以使用环境变量。

file1=abc.csv file2=xyz.csv script1.sh script2.sh

这会在调用file1时设置环境变量file2script1.sh。除非script1.sh采取有意的措施覆盖它们,否则它们会自动传递给script2.sh

然后,您可以移除script2.sh中分配给file1file2的行。它们已经被置于环境中。

答案 1 :(得分:0)

像大脑一样思考。正如Barmar所说,使用环境变量:

创建一个启动器脚本:

#!/bin/sh -

export SCRIPT2_A1=$1
export SCRIPT2_A2=$2

script1.sh script2.sh

现在将script2.sh更改为:

#!/bin/sh

A1=${SCRIPT2_A1:-$1}
A2=${SCRIPT2_A2:-$2}

# now use A1 and A2 as you would $1 and $2

答案 2 :(得分:0)

使用$ script1.sh "script2.sh file1=abc.csv file2=xyz.csv"

这是添加双引号