将变量传递给Expect和Spawn

时间:2019-12-19 21:02:42

标签: bash variables scp spawn

我正在编写一个脚本,该脚本将从本地服务器 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

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

  

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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