2017-01-05 37 views
0

目前我正在運行此腳本來打印遠程盒子上的目錄,但我不確定此代碼是否正常工作。如何在bash腳本中編寫expect代碼片段來運行遠程命令?

#!/bin/bash 

PWD="test123" 
ip="10.9.8.38" 
user=$1 
/usr/bin/expect <<EOD 
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected]$ip df -h 
expect "*assword:" 
send "$PWD\n" 
interact 
EOD 
+0

希望這可以幫助:http://www.thegeekstuff.com/2010/10/expect-examples/ – OscarAkaElvis

回答

2

expect產生一個新的子shell,因此當地bash變量失去其範圍,以實現這一目標的一個方法是export您的變量來使其可用於子shell。使用內置的Tcl env在腳本中導入這些變量。

#!/bin/bash 

export pwdir="test123" 
export ip="10.9.8.38" 
export user=$1 
/usr/bin/expect <<EOD 
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no "$env(user)"@"$env(ip)" df -h 
expect "*assword:" 
send "$env(pwdir)\n" 
interact 
EOD 

(OR)如果你不感興趣,直接使用expect腳本以#!/usr/bin/expect她爆炸,你可以這樣做

#!/usr/bin/expect 

set pwdir [lindex $argv 0]; 
set ip [lindex $argv 1]; 
set user [lindex $argv 2]; 
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no [email protected]$ip df -h 
expect "*assword:" 
send "$pwdir\n" 
interact 

,並運行腳本

./script.exp "test123" "10.9.8.38" "johndoe" 
+0

感謝您在我的腳本中的建議我發送「$ PWD \ n」後添加了睡眠2,它工作。現在,它在輸出,但我不能grep它或在我的本地盒子中使用它。 –

+0

@sandy_ws:如果此解決方案有效,您可以對其進行upvote/accept並將其標記爲已解決。您可以在另一篇文章中提出您的問題(或)提供有關哪些功能無法使用的更多詳細信息 – Inian