2014-02-11 64 views
1

我已經看過一些在這裏的相關問題和答案,但我仍然難倒:-(麻煩經過多字的參數從bash的期望

我想從通過一個多字指令一個bash腳本的expect腳本的expect腳本里面,多字命令將被髮送語句執行

所以,多字的命令是:。

get dump perf 0 

它存儲在bash腳本中的變量名爲usrcmd

的expect腳本被稱爲像這樣:

./userspecifiedcmd.exp root $password $server $usrcmd 

在expect腳本,多字指令被提取如下:如下

set usercommand [lrange $argv 3 3] 

而且多字的命令被執行:send "$usercommand\r"

結果...

的字符串實際上由0123發送說法是:get

我試圖把周圍的$usrcmd變量引號當我啓動expect腳本,像這樣:

./userspecifiedcmd.exp root $password $server "$usrcmd" 

當我做到這一點,通過發送聲明發送的字符串是:{get dump perf 0}

我的直覺告訴我有一個簡單的修復方法。我的直覺是否正確?

Thx!

+0

請使用反引號來分隔內嵌代碼,然後選擇並按下'{}'在編輯鍵來分隔大塊(由\ n將它們分開,並在開始時加4位線)。 – BroSlow

回答

0

的期望腳本應該這樣調用:

./userspecifiedcmd.exp root "$password" "$server" "$usrcmd" 

總是給你的shell變量,除非你有一個令人信服的忽略它們。

在期待,映射參數傳遞給變量是這樣的:

lassign $argv user password server usercommand 

lrange命令返回一個列表,當你處理像一個字符串列表,你會得到{}文物。注意你的Tcl數據類型:將列表作爲列表處理,將字符串作爲字符串處理。當你有一個列表時,用join把它「轉換」成一個字符串乾淨。

Tcl的手冊是有益的:http://tcl.tk/man/tcl8.5/TclCmd/contents.htm
由於是TCL教程:http://tcl.tk/man/tcl8.5/tutorial/tcltutorial.html

+0

Thx Glenn。在平常的錢上。現在就像魅力一樣。 Tcl教程鏈接現在位於我的「工具」文件夾中,並將成爲我的第一站。 – feenyman99

0

我不知道這是最好的解決辦法,但你可以做這樣的事情:

ls -1 < "echo $(ls a*)" 

所以我們把所有的東西都列爲所有文件的一部分。

在你的情況,

./userspecifiedcmd.exp root $password $server < "echo $usrcmd" 
+0

我不明白這是如何解決問題的。 –