echo
測試顯示我的命令行變量正在工作,但是如何通過它們導出它們以用於嵌入式expect
?導出在嵌入式中使用的Bash命令行參數變量Expect
#!/bin/bash
echo name of script is $0
echo host is $1
echo hostusername is $2
echo hostpassword is $3
expect -c 'spawn ssh -l $2 $1 < ./sf-wall_scp_bash.sh
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$3\r"}
}
sleep 1
'
如果與expect
家當調用,它就像
#!/usr/bin/expect
set host [lindex $argv 0]
set hostusername [lindex $argv 1]
set hostpassword [lindex $argv 2]
spawn ssh -l $hostusername $host
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$hostpassword\r"}
}
sleep 1
...如預期其工作。我需要使用bash
,並且嵌入expect
,因爲腳本需要調用bash特定的命令,函數,內置變量......否則,僅僅使用第二個示例將是一個工作選項,但事實並非如此。
我試過聲明和導出命令行參數變量,並在上面的第一個示例中分別更改$ 1,$ 2,$ 3到變量名稱聲明和導出,這在另一個腳本中,我有我在其中在腳本中聲明變量......區別在於它們不是命令行參數。
host=$1
export host
hostusername=$2
export hostusername
hostpassword=$3
export hostpassword
以及剛剛導出他們
export host
export hostusername
export hostpassword
並試圖上面的第一個例子。沒有變化,expect
繼續聲稱
無法讀取「X」:沒有這樣的變量
在另一個bash腳本,我能夠雙方宣佈它們,然後它們導出爲成功導出變量在上面的例子中。但是我一直沒能通過bash
命令行參數變量來運行expect
在您的初始腳本中,請嘗試雙引號。單引號(按設計)不能替代變量。您需要在期望的腳本中使用任何文字雙引號或美元符號(帶反斜槓)。 – phs 2013-03-14 02:04:50
ssh旨在強制人們不要將密碼放在腳本和文件中。期望撤消設計。考慮SSH密鑰。他們不難實施。 – 2013-03-14 02:45:06
@jimmcnamara ssh登錄信息不是我將使用命令行參數的唯一東西,我只是在我的示例中包含了這一點。另外,密碼並沒有放在腳本文件中,它們是動態的,特定於我無法設置密鑰的機器,以及爲什麼它們是通過CLI參數提供的。 – TryTryAgain 2013-03-14 03:55:12