Shell-Script

我如何“獲取”期望腳本

  • February 4, 2020

我被迫使用如下腳本:

# test.sh
function my_fun
{
   echo "Give value for FOO"
   local my_var
   read my_var
   export FOO=$my_var
}

# Call my_fun function
my_fun

通過從我的外殼採購它。

$ source test.sh
Give value for FOO
stackexchange
$ echo $FOO
stackexchange

我想用期望自動化腳本,如下所示:

$ expect test.exp
$ echo $FOO
stackexchange

環境變數的數量和名稱test.sh未知。

更新:

  • 將 my_fun 函式全部添加到 test.sh。

根本問題是子程序不能改變其父程序的環境。這就是您需要source該 shell 腳本的原因,因此環境變數將保留在您目前的 shell 中。

Expect 是為spawn子程序設計的。您目前的 shell不會受到expect test.exp.

但是,您可以生成一個 shell,獲取該 shell 腳本,然後通過與它互動來保留shell:這是我的想法,並且未經測試:

#!/usr/bin/expect -f
set timeout -1
spawn $env(SHELL)
set myprompt "some pattern that matches your prompt"
expect -re $myprompt
send "source test.sh\r"
expect {
   "Give value for " {
       # provide the same answer for every question:
       send "some value\r"
       exp_continue
   }
   -re $myprompt
}
interact

現在您正在與您生成的 shell 進行互動。當你exit使用那個 shell 時,生成的 shell 會死掉,然後期望腳本結束,然後你回到目前的 shell(沒有你初始化的變數)。

引用自:https://unix.stackexchange.com/questions/496451