如何“输出”命令“日期”? (linux / expect / sftp)

时间:2012-11-03 08:49:15

标签: linux sftp expect

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

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

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

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

脚本1(sh脚本)

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

导出文件名

脚本2(exp脚本)

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

出口

我的努力如下所示。

my * .sh script =

开始

#!/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中/期望

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:export:2:错误的变量名称

- 端 -

感谢您的重播..

2 个答案:

答案 0 :(得分:1)

"错误的变量名称"错误是由于您导出变量的而不是变量的名称export $file错误,请使用export file

预计,您可以通过全局env数组访问环境变量,因此请使用$env(file)而不是$file

答案 1 :(得分:0)

继续并在同一行中发出导出和变量:

$export filename=`date +'%F' | sed 's/[-]//g'`.csv
$echo $filename
20121103.csv