如何獲得expect中spawn的命令的返回值?

2021-09-25 09:29:27 字數 1474 閱讀 4083

我們寫乙個名為test.sh的小指令碼,程式的原始碼如下:

#!/bin/bash

expect_test()

x" = "x" ];then

echo "warning:no data"

ret=1

else

echo "the date is:$"

ret=0

fireturn $ret

}expect_test

我們寫乙個expect指令碼:

#!/usr/bin/expect

spawn sh test.sh

expect "please input data:"

send "just for test\n"

expect eof

catch wait result

exit [lindex $result 3]

解釋:

第6行:catch wait result

解釋:將wait命令的返回值儲存到result變數中. result變數並不是乙個特殊變數, 你可以隨意換乙個新名字(比如retval).

備註:wait命令的返回值是乙個"%d %s 0 %d"格式的字串,第0個值是pid,第1個是spawn_id(不知道它具體帶表了什麼),第2個應當是代表指令碼是否正常完成,第3個是子程序的返回值.

第7行:exit [lindex $result 3]

將result變數(這個變數儲存的是乙個列表)list中的index=3的那個值取出來,返回它。你可以搜尋"tcl 列表 lindex"以檢視詳細資訊。

指令碼執行結果:

例:

#!/bin/bash

expect_test()

" echo "will call expect1."

expect -c ' #注意這裡要使用單引號,雙引號效果不一樣

spawn sh test.sh

expect "please input data:"

send '$'\n

expect eof

catch wait result

exit [lindex $result 3]

' echo $?

echo "call expect1 finish."

echo ">>>>>>>>>>>>>>>>>>>>"

}expect_test 120

expect_test

執行結果:

Ubuntu UBUNTU中如何獲得root許可權

在終端中輸入 sudo passwd root enter new unix password 在這輸入你的密碼 retype new unix password 確定你輸入的密碼 passwd password updated successfully 以後,如果在想獲得root許可權,只需進行如...

如何用expect讀檔案

之前我寫expect指令碼喜歡在bash中嵌入here document來實現,因為這樣往expect指令碼中傳shell變數比較方便。結果最近發現有個問題,當我用while讀檔案的時候,變數值全部為空。這是因為here document中把變數當作是bash的變數,而不是expect中的變數。所以...

如何在系統中獲得幫助

如何在系統中獲得幫助 1.當得到乙個命令我們不知道這個命令的作用時 whatis 命令 操作 顯示rm這個命令的用途 2.當知道命令的用途,但是不知道命令的執行格式或者方式時 help 獲得命令的幫助。help只適用於命令 例如 rm help 選加 可以加也可以不加 加的個數可以是任意多個 必須加...