繁体   English   中英

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

[英]How to call another shell script from a shell script in 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和script_3.sh。 我能够执行script_2.sh将参数传递给script_2.sh并且它运行正常。 当我包含script_3.sh时问题已经开始。 当我执行第一个shell脚本时,它给出了以下错误。

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

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

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是2 $2等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM