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

时间:2017-04-19 07:18:45

标签: bash unix

我试图从unix(bash)

中的shell脚本中调用另一个shell脚本

1st 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&amp; script_3.sh。我能够执行script_2.sh将参数传递给script_2.sh并且它运行正常。当我包含script_3.sh时问题已经开始。当我执行第一个shell脚本时,它给出了以下错误。

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

不确定为什么会这样。此外,这种建议的方式是传递参数并调用其他shell脚本吗?请让我知道

2 个答案:

答案 0 :(得分:1)

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

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

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,第二个单词等等。

答案 1 :(得分:-1)

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