将变量传递给Expect和Spawn

问题描述 投票:0回答:2

我正在编写一个脚本,该脚本将从本地服务器scp一个tar文件到远程主机。由于脚本通过先决过程生成文件,因此名称是动态生成的。我的脚本需要使用文件名,并将其传递给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

我尝试将文件名设置为变量,但仍然看到相同的错误:

无法读取“(日期+%y%m%d_%H%M)”:无此类变量执行“ spawn scp test。$(date +%y%m%d_%H%M).tar user @ IP-ADDRESS:/ destination / folder“

bash variables scp spawn
2个回答
0
投票

$(date +%y%m%d_%H%M)不是Tcl命令。如果使用expect,则必须学习Tcl。要获得Tcl中的格式化日期,请使用clock命令。另外,Tcl中命令的结果插值不是由$(....)完成,而是由[....]完成。您可以找到此结构here的示例。


0
投票

决定走另一条路,因为团队能够为此二进制文件和类似文件提供新的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
© www.soinside.com 2019 - 2024. All rights reserved.