Shell-Script
我如何“獲取”期望腳本
我被迫使用如下腳本:
# 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(沒有你初始化的變數)。