簡體   English   中英

將變量傳遞給 Expect 和 Spawn

[英]Passing variable to Expect and Spawn

我正在編寫一個腳本,它將 tar 文件從我的本地服務器scp到遠程主機。 由於腳本通過先決條件生成文件,因此名稱是動態生成的。 我的腳本需要取文件名並將其傳遞給 scp 進行傳輸。

#!/usr/bin/expect -f

spawn scp test.$(date +%y%m%d_%H%M).tar user@IP-ADDRESS:/destination/folder
set pass "password"
expect "password: "
send -- "$pass\r"
expect eof

我嘗試將文件名設置為變量,但一直看到相同的錯誤:

無法讀取“(date +%y%m%d_%H%M)”:執行“spawn scp test.$(date +%y%m%d_%H%M).tar user@時沒有這樣的變量” IP地址:/目的地/文件夾”

$(date +%y%m%d_%H%M)不是 Tcl 命令。 如果使用expect ,則必須學習 Tcl。 要在 Tcl 中獲取格式化的日期,請使用clock命令。 此外,Tcl 中命令的結果的插值不是由$(....) ,而是由[....] 您可以在此處找到此構造的示例。

決定走另一條路,因為團隊能夠為此二進制文件等提供新的 Artifactory 存儲庫。 但是,根據此處提供的建議,我能夠發現一些用於解決問題的發現:

我還有一個帶有 $ 符號的密碼,這也引起了很多問題。

#!/bin/bash

TEST=$(date +%y%m%d_%H%M)
/usr/bin/expect <<eof

set password {pas\$word}
spawn scp "$TEST" user@IP-ADDRESS:/destination/folder
expect "*password:"
send "$pasword\r"
expect eof

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM