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