如何在Expect Shell脚本中获取生成的进程的退出代码?

我试图执行一个脚本,该脚本执行一个EXPECT脚本和一个生成的进程,其中包含退出代码。但是我无法将生成的进程的退出代码获取到主脚本。作为成功,我总是零。

期望脚本是:

 [Linux Dev:anr ]$ cat testexit.sh

#!/bin/bash

export tmp_script_file="/home/anr/tmp_script_temp.sh"

cp /home/anr/tmp_script $tmp_script_file

chmod a+x $tmp_script_file

cat $tmp_script_file

expect << 'EOF'

set timeout -1

spawn $env(tmp_script_file)

expect {

"INVALID " { exit 4 }

timeout { exit 4 }

}

EOF

echo "spawned process status" $?

rm -f $tmp_script_file

echo "done"

产生的脚本:

 [Linux Dev:anr ]$ cat tmp_script

exit 3

执行Expect脚本:

 [Linux Dev:anr ]$ ./testexit.sh

exit 3

spawn /home/anr/tmp_script_temp.sh

spawned process status 0

done

问题是我无法获得生成的退出返回代码以期望脚本。我希望生成脚本的退出代码3到主脚本,并且主脚本应该以退出代码3退出。

请帮助我将生成的退出代码获取到主脚本。

回答:

在格伦的帮助下,我得到了解决方案..我的最终脚本是::

期望脚本是

 [Linux Dev:anr ]$ cat testexit.sh

#!/bin/bash

export tmp_script_file="/home/anr/tmp_script_temp.sh"

cp /home/anr/tmp_script $tmp_script_file

chmod a+x $tmp_script_file

cat $tmp_script_file

expect << 'EOF'

set timeout -1

spawn $env(tmp_script_file)

expect {

"INVALID " { exit 4 }

timeout { exit 4 }

eof

}

foreach {pid spawnid os_error_flag value} [wait] break

if {$os_error_flag == 0} {

puts "exit status: $value"

exit $value

} else {

puts "errno: $value"

exit $value

}

EOF

echo "spawned process status" $?

rm -f $tmp_script_file

echo "done"

产生的脚本:

 [Linux Dev:anr ]$ cat tmp_script

exit 3

执行Expect脚本:

 [Linux Dev:anr ]$ ./testexit.sh

exit 3

spawn /home/anr/tmp_script_temp.sh

exit status: 3

spawned process status 3

done

再次感谢格伦..

以上是 如何在Expect Shell脚本中获取生成的进程的退出代码? 的全部内容, 来源链接: utcz.com/qa/422976.html

回到顶部