Linux 如何在不更改脚本1的情况下从脚本1调用脚本2及其2个参数?

Linux 如何在不更改脚本1的情况下从脚本1调用脚本2及其2个参数?,linux,bash,shell,Linux,Bash,Shell,我有两个脚本 1) script1.sh->它只调用script2.sh,并保留日志和时间等。我无法对script1.sh进行任何更改。它只用于调用script2.sh 2) script2.sh->这是唯一一个将一个文件从特定位置加载到另一个位置的命令。我将文件名作为参数1从位置1传递,并将文件名作为参数2上载到位置2 脚本2.sh: file1=$1 file2=$2 /home/test put /home/$1 uploads/final/$2 我运行的最后一个脚本是: script

我有两个脚本

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

2)
script2.sh
->这是唯一一个将一个文件从特定位置加载到另一个位置的命令。我将文件名作为参数1从位置1传递,并将文件名作为参数2上载到位置2

脚本2.sh:

file1=$1
file2=$2

/home/test put /home/$1 uploads/final/$2
我运行的最后一个脚本是:

script1.sh script2.sh file1=abc.csv file2=xyz.csv
但不知何故,我无法使用被称为脚本2的参数。是否有一种方法可以在不更改脚本1的情况下使用被调用脚本2的参数


如果您对此有任何帮助,我们将不胜感激。

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

file1=abc.csv file2=xyz.csv script1.sh script2.sh
这将在调用
script1.sh
时设置环境变量
file1
file2
。除非
script1.sh
故意采取措施覆盖它们,否则它们将自动传递到
script2.sh


然后可以删除
script2.sh
中分配给
file1
file2
的行。他们已经被安置在环境中了。

相似的人想法相似。正如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
使用
$script1.sh“script2.sh file1=abc.csv file2=xyz.csv”


那就是添加双引号

你能编辑你的帖子并提供script1.sh的全文吗?它是选通项,将指定script2.sh应包含的内容。据猜测,script1只使用
$1
,而忽略了自己的
$2
$3
,因此无法将它们传递给script2。如果你也可以发布script2,那也会有帮助。Script1.sh只是一个处理日志的大文件,如果失败会发送电子邮件,等等。它唯一做的就是调用script2.sh。我可以独立运行script2.sh,但我需要script1.sh的所有日志和其他功能。因此,我需要使用script1.sh而不更改它。我已经发布了我的script2.shPost内容,它是script1调用script2的实际行。这应该是足够的[而且是必要的]不幸的是,我没有访问script1.sh的权限,但它需要2个参数。script1.sh param1 param2。参数是可选的。我可以在script2.sh中打印$1、$2时,打印的是什么?script1.sh使用一个参数,其中它调用script2.sh。但是script2.sh有两个无法实现的参数。
script1.sh
本身无法传递的任何内容都可以像这样作为环境变量传递。这取决于
script1.sh
在运行给定命令时如何使用其参数。@Barmar,但OP必须说。@Barmar,你很完美,但我只是想为这次行动找到一个可能的解决办法。我的想法很有可能会成功。让我们看看他说了什么。@JayKumarR不要盲目地回答,你应该通过评论他的问题来要求OP澄清。@Austin,你检查过上面的解决方案对你是否有效吗?