linux 预期执行的shell脚本不退出

xoshrz7s  于 2023-01-04  发布在  Linux
关注(0)|答案(1)|浏览(460)

我使用expect来自动安装一个软件。这是我的脚本中的简化expect代码,但是当我直接将它粘贴到控制台中时,同样的问题也会发生。

expect <<-EOS
#!/usr/bin/expect -f
set timeout -1

#run the command
spawn ./installSoftware.sh

expect "*?Question 1*" { send "N\r" }

expect -ex {Question 2 (default is [RANDOM STRING]):} { send "\r" }

puts "-------------- DONE 1 ---------------"
expect eof
puts "-------------- DONE 2 ---------------"
EOS

installSoftware.sh是一个安装软件包和其他东西的大脚本。2脚本的最后一行有。

echo "----------- Done-----------"

当installSoftware.sh我直接执行www.example.com脚本时,它工作正常,但当我将其与expect脚本一起使用时,它会运行并从最后一行显示“done”回显,但随后它就卡住了。我可以通过HTOP看到脚本的进程仍在运行,installSoftware.sh脚本不退出。
有什么想法如何调试这个吗?这是www.example.com脚本的问题installSoftware.sh还是与expect相关的问题?
我可以告诉你的是,如果我从www.example.com中删除这一行installSoftware.sh,它会像预期的那样退出我的installSoftware.sh,但这是在hugh脚本中间的某个地方。

rpm -Uvh --oldpackage --replacepkgs mysoftware.rpm
8cdiaqws

8cdiaqws1#

我已经发现了这个问题,这个问题是在脚本中的RPM包内部。这个例子复制了相同的问题,并将显示spawn任务将在没有直接指示子进程的情况下停留在最后。
expect.sh

#!/bin/bash
    
expect <<-EOS
#!/usr/bin/expect -f
set timeout -1
    
#run the command
spawn ./test.sh
    
expect eof
    
EOS

test.sh

cp -f sleep.sh /tmp
chmod 777 /tmp/sleep.sh
su testuser -c "/tmp/sleep.sh &"
echo "--- DONE ---"

sleep.sh

#!/bin/bash

while true
do
   echo "loading..."
   sleep 5
done

相关问题