如何从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脚本?请让我知道
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
第二个等等。
script_3.sh在script_1.sh之外执行时是否正常运行? –
检查您是否可以从命令行运行'/ usr/bin/sh'。它看起来像'script_3.sh'在某处调用'/ usr/bin/sh'。 – cdarke
你可以显示完整的错误输出,特别是错误前面的'xtrace'('-x')输出吗? – cdarke