我试图从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脚本吗?请让我知道
答案 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提供适当的权限,然后重试