如何从shell脚本调用另一个shell脚本的Unix

问题描述:

我想从一个shell脚本里面UNIX调用另一个shell脚本(bash)的如何从shell脚本调用另一个shell脚本的Unix

1日shell脚本(script_1.sh):

VARIABLE_1=<VALUE> 
<unix_code> 
<unix_code> 
.. 
.. 
.. 
export VARIABLE_1 
bash -x script_2.sh 
bash -x script_3.sh 

我在这里的要求是将VARIABLE_1的值传递给script_2.sh & script_3.sh。我能够执行script_2.sh将参数传递给script_2.sh,并且工作正常。问题已经开始,当我包含script_3.sh。它给我下面的错误,当我执行第一个shell脚本。

/usr/bin/sh: /usr/bin/sh: cannot execute binary file 

不知道为什么会发生这种情况。另外,这是推荐的方式来传递参数并调用其他shell脚本?请让我知道

+1

script_3.sh在script_1.sh之外执行时是否正常运行? –

+0

检查您是否可以从命令行运行'/ usr/bin/sh'。它看起来像'script_3.sh'在某处调用'/ usr/bin/sh'。 – cdarke

+0

你可以显示完整的错误输出,特别是错误前面的'xtrace'('-x')输出吗? – cdarke

script_3.sh可能没有执行权限。使用chmod提供适当的权限,然后再试一次

cannot execute binary file并不表示该文件缺少执行权限。实际上,将脚本作为“bash文件名”运行,不需要文件名的可执行权限。

错误消息告诉您脚本文件不是实际的脚本文件,而是一个二进制文件,可能是一个可执行文件。如果是这样的话,不要做:

bash +x filename 

只是做:

filename 

此外,将参数传递给脚本,你可以这样做是这样的:

scriptfile arg1 arg2 arg3

然后在您的脚本中提及$1,$2$3。或$*来指代所有这些。

编辑:

还要注意执行一个脚本,你不需要使用bash scriptfile,你可能只是运行scriptfile。在这种情况下,scriptfile必须具有可执行权限(即,chmod +x scriptfile)。此外,如果该文件位于当前目录中,但.不是PATH变量的一部分,则将找不到脚本文件。在这种情况下,你应该执行你的脚本文件为./scriptfile

你的脚本将改变为:

VARIABLE_1=<VALUE> 
... 
./script_2.sh "$VARIABLE_1" 
./script_3.sh "$VARIABLE_1" 

您不再需要导出VARIABLE_1。引号是确保VARIABLE_1的内容作为单个参数传递的必要条件。 script_2.sh和script_3.sh将看到值为$1。如果VARIABLE_1中有空格,并且您省略了引号,则每个单词都将作为单独的值传递。也就是说,$1将会有第一个字,$2第二个等等。

+0

我认为错误信息意味着'/ usr/bin/sh'不能被执行。如果是脚本名称,那么它会说'script_3.sh:script_3.sh不能执行二进制文件' – cdarke

+1

我想知道script_3.sh内容是什么。也许错误信息来自script_3.sh内部执行的内容,而不是来自script_3.sh – kontiki

+0

的实际调用,这是我的猜测,但OP没有回答我的问题 – cdarke