簡體   English   中英

通過 bash 數組期望腳本

[英]Pass bash array to expect script

我有一個像這樣調用期望腳本的 bash 腳本

$SCRIPTS_DIRECTORY/my_expect_script.sh $my_bash_array

看來,我可以傳遞一個變量並使用它。 對於此示例,變量似乎位於[lindex $argv 0]中。

從 bash 開始,它將是一堆值,例如1 2 3 4 5

我試圖弄清楚如何使用 expect 來獲取這個變量,將其保存到一個數組中,然后循環遍歷該數組以一次吐出多個命令。

所以我的 output 應該是這樣的

send command 1 \r
send command 2 \r

等等,直到它到達數組的末尾。

我以為我會像這樣分配它

array set myArray [lindex $argv 0]

但看起來我錯了。

有沒有人有任何我可以看的好地方可以解釋從 bash 期望更好,或者知道如何做到這一點? 我認為它相對簡單,但在某些方面對我來說是非常不確定的。

示例文件

my_array=(1 2 3 4 5)
expect sample.exp "${my_array[@]}"

示例文件

foreach arg $argv { 
    puts "arg : $arg"   
}

輸出:

dinesh@mypc:~$ ./sample.sh 
arg : 1
arg : 2
arg : 3
arg : 4
arg : 5
dinesh@mypc:~$

擴展@glenn jackman 的評論...

Expect 將 Array 視為一組密鑰對值,而 Expect 將 List 簡單地視為列表。

因此能夠將數組/列表作為單個參數傳遞......

數組示例 (myExpectArray.tcl)

array set myArray [lindex $argv 0];
foreach item [array name myArray] {
  puts $myArray($item)
}

從命令行調用期望腳本...

myExpectArray.tcl "0 dog 1 cat 2 rabbit"

要從 bash 調用它,您需要遍歷數組並構建要傳遞給期望腳本的字符串。 使用列表更容易...

列表示例 (myExpectList.tcl)

set myList [lindex $argv 0];
for {set i 0} $i <= [llength $myList]} {incr i} {
  puts [lindex $myList $i]
}

從bash調用expect腳本如下...

myAnimals+=( "dog" "cat" "rabbit" )
myArgs=${myAnimals[@]}
myExpectList.tcl "$myArgs"

暫無
暫無

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

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