簡體   English   中英

期望執行的 shell 腳本不退出

[英]Expect executed shell script don't exit

我使用 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 是一個用於安裝軟件包和許多其他東西的大腳本。 該腳本在最后一行。

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

installSoftware.sh 腳本在我直接執行時工作正常,但是當我將它與 expect 腳本一起使用時,它會運行並顯示最后一行的“完成”回顯,但隨后它卡住了。 我可以通過 HTOP 看到腳本的進程仍在運行,installSoftware.sh 腳本不會退出。

任何想法如何調試這個? 這更多是 installSoftware.sh 腳本的問題還是與 expect 相關的問題?

我可以說的是,如果我從 installSoftware.sh 中刪除這一行,它會按預期退出我的 installSoftware.sh,但這是在 hugh 腳本中間的某個地方。

rpm -Uvh --oldpackage --replacepkgs mysoftware.rpm 

我發現了問題,問題出在腳本中的 RPM package 內。 這個例子復制了同樣的問題,並且將表明 spawn 任務將卡在最后,而沒有直接指示子進程。

期望.sh

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

測試.sh

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

睡眠.sh

#!/bin/bash

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM