2016-11-15 113 views
0

我是新來的shell腳本和瀏覽不同的腳本語言。預計腳本:ls命令的輸出設置爲變量

我正在寫一個expect腳本,我想一個SSH ls命令的輸出設置爲變量,通過循環,就像下面的bash腳本

#!/bin/bash 
var=$(ssh [email protected] ls path | grep 'keyword') 

echo $var 

for x in $var; 
# do stuff 
done 

但我不知道如何在預期腳本中執行此操作。我搜索的其他例子似乎將send的輸出設置爲變量 - 這是路線嗎?

感謝您的幫助。

回答

0

捕捉髮送的命令的輸出到一個期望變量實際上是一個PITA。捕獲的輸出包含命令和提示:假設您的提示是"> ",併發送date命令。預計會看到這樣的:

"date\r\nTue Nov 15 11:34:16 EST 2016\r\n> " 

所以,你需要這樣做捕獲輸出:

send -- "date\r" 
expect -re {^[^\n]+\n(.*)\r\n> $} 
set output $expect_out(1,string) 

在這種複雜的格局:

  • ^[^\n]+\n將匹配您發送的命令(最多到第一行) - 這是date\r\n
  • (.*)\r\n是命令的輸出(直到最後升INE結尾)
    • 預計將捕獲的文本存儲在變量expect_out(1,string)
  • > $是您匹配您的提示。

所以你的程序是:

#!/usr/bin/env expect 
spawn ssh [email protected] 
expect -re {\$ $}  ;# regular expression to match your prompt 

send -- "ls path | grep keyword\r" 
expect -re {^[^\n]+\n(.*)\r\n$ $} 
set output $expect_out(1,string) 

send -- "exit\r" 
expect eof 

puts $output 
+0

它說:無法讀取「expect_out(1串)」:沒有這樣的變量 – chungkim271

+0

請問您提示最終以一個美元符號和空間?如果不是,則必須調整該正則表達式。 –