腳本看着它期望從第一,這是很簡單的。當給定2個參數時,set
命令設置變量的值。這裏的變量名稱是kludge
,值是{braces}
之間的多行字符串。請注意,在Tcl(和Expect)大括號中禁止擴展(變量替換,命令擴展等),就像單引號在shell中一樣。假設從未使用變量kludge
,這是一個完全無害的陳述。
從外殼有點棘手。這個上下文中的shell命令set
將設置位置參數。此命令後:
$1 = "kludge"
$2 = "{"
$3, $4, ... <= will be the original command line parameters
再就是2個shift
命令彈出"kludge"
和"{"
關的參數「棧」,恢復原始位置參數。然後exec
命令將啓動expect,替換當前正在運行的shell進程。 如果未使用exec
,預計將運行和(大概)終止,然後外殼將上下一行報告語法錯誤:}
總的來說,這是發動期望程序過於聰明的辦法。
#!/bin/bash
do whatever shell initialization required
expect -c << 'END_OF_EXPECT'
# rest of expect script follows
# ...
END_OF_EXPECT
要通過選擇在這種情況下:「劇本#其餘遵循」以
#!/usr/bin/expect -f
或者,如果有多更多的東西在外殼部分發生,用此之前更換一切
expect - "[email protected]" << 'END_OF_EXPECT'
# ...
單個-
告訴我們期望命令會出現在stdin上。
感謝@glenn了明確的答案你提到的secoand計算策略是好的,但我可以通過positonal參數期望在這種情況下,腳本考慮到它不與的bash腳本謝爾參數衝突......我的意思是我可以做一些事情像這樣expect -c parameter1 parameter2 <<'EOF'EOF – munish 2013-03-05 06:31:50
@munish,答案已更新。 – 2013-03-05 10:20:25