1

我想从 sftp 服务器安排文件复制。不允许使用公钥,所以我只知道一种使用期望的方法。

问题是文件名每天都在变化,但文件名实际上是 date+.csv 所以我可以安排它。

但无法设置变量文件名...

我想在 2 个脚本中做这样的事情。

脚本 1(sh 脚本)

文件名=日期 %Y%m%d

导出文件名

脚本 2(exp 脚本)

连接到 sftp 服务器获取文件名。

出口

我的努力如下。

我的 *.sh 脚本 =

开始

#!/bin/sh
file=$(date --date='-2 days' +%Y%m%d.csv)"
# looking for something like this (20121031.csv)
export file
expect /home/desk4/task/sftp.exp

结尾

我的期望脚本位于“/home/desk4/task/sftp.exp”

开始

!/usr/bin/expect

spawn /usr/bin/sftp user@server.com
expect "user@server.com's password:"
send "password"
send "\r"
expect "sftp>"
spawn "get $file \r"
expect "sftp>"
send "bye \r"

结尾

错误

./sftp.sh: 3: export: 20121031.csv: 变量名错误

当我更新用于测试目的的 sh 脚本时,如下所示......

#!/bin/sh
file=$(date)
export $file
expect /home/harshit/Desktop/1/sftp.exp

======================================== 错误= ./sftp.sh: 3: 导出: 2: 错误的变量名

- 结尾 -

谢谢你的重播。。

4

2 回答 2

1

“bad variable name”错误是由于您导出变量的,而不是变量的名称export $file是错误的,使用export file

在期望中,您通过全局env数组访问环境变量,所以$env(file)不要使用$file

于 2012-11-03T19:36:40.530 回答
0

继续在同一行发出 export 和 variable :

$export filename=`date +'%F' | sed 's/[-]//g'`.csv
$echo $filename
20121103.csv
于 2012-11-03T08:54:17.133 回答