【问题标题】:How to "export" out put of command "date"? (linux / expect / sftp)如何“导出”命令“日期”的输出? (linux /期望/ sftp)
【发布时间】:2012-10-23 20:07:57
【问题描述】:

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

问题是文件名每天都在变化,但文件名实际上是日期+.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: export: 2: bad variable name

--结束--

感谢您的重播..

【问题讨论】:

  • 您在 sftp.sh 中的 file= 之后错过了引号 - 导出应该没有 $... 您甚至可以像 export file="... 那样将其放在一行中
  • 有点跑题了,为什么要用expect+passwords而不是pubkey认证呢?

标签: linux sftp expect


【解决方案1】:

“bad variable name”错误是因为你导出了变量的value,而不是变量的nameexport $file错了,用@ 987654322@

在expect中,你通过全局env数组访问环境变量,所以使用$env(file)而不是$file

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2012-09-01
      相关资源
      最近更新 更多