0

我有一个父脚本,在后台执行一个子脚本:

#!/bin/bash
# parent.sh
childScript $param1 $param2&

子脚本:

#!/bin/bash
# childScript.sh
param1=$1
param2=$2
someLinuxCommand $param1 $param2
out=$?
echo $out

如果我用正确的 $param1 和 $param2 执行 childScript.sh,$? 将返回 0。如果 $param1 和 $param2 不正确,$? 将返回 1。

但无论我使用 parent.sh 发送什么 $param1 和 $param2,$? 总是返回 0。为什么如果我从 parent.sh 发送不正确的 $param1 和 $param2,$?在 childScript.sh 返回 0?

4

1 回答 1

1

在您的子脚本中,您“返回”结果echo将始终为 0。您应该使用 ...

exit $? 

... 反而。或者只是把这条线放在一起。

这是一个模仿您的脚本的示例:

$ cat parent.sh
#!/bin/bash

p1=$1
p2='file'
./child.sh $p1 $p2

$ cat child.sh
#!/bin/sh

grep $1 $2
out=$?
echo $out

子脚本将为“文件”中的模式“grep”。这是文件“文件”的内容。

$ cat file
c.sh
file
in.txt
p.sh
bill

如果 grep 在文件中找到模式 grep 将成功,因此设置 $? 为 0。但如果 grep 在文件中找不到模式 grep 将失败此设置 $? 为 1。

在这里,我们使用“bob”模式运行父级

$ ./parent.sh bob
1

grep没有找到 bob,因此设置$?为 1。echo输出 1,然后设置$?为 0。

$ echo $?
0

让我们将 child.sh 脚本修复为:

$ cat child.sh
#!/bin/sh

grep $1 $2

并再次运行 parent.sh:

$ ./parent.sh bob
$ echo $?
1

$ ./parent.sh bill
bill
$ echo $?
0
于 2017-09-22T07:45:36.713 回答