繁体   English   中英

期望脚本:在变量中获取最后修改日期

[英]Expect script: get last modified date in a variable

我使用expect通过sftp连接到远程系统。 我想将文件my.csv的最后修改日期转换为expect脚本中的变量

以下是我的代码:

 spawn sftp -o Port=$port $user@$host
 expect "Password:"
 send "$password\r";
 expect "sftp> "
 set file_time [exec ls -la my.csv| awk {{ print $6$7$8}}]
 send "echo $file_time\r";
 expect "sftp> "
 send "quit\r";
 expect eof

好的,我更加努力地看待这个。 我看到一些错误:

  1. 当您执行ls -la时,您在本地计算机上执行此操作...而不是在远程sftp服务器上执行此操作。 如果要在sftp服务器上执行该操作,则需要使用“send”,以便通过生成的会话发送它。
  2. 如果您使用'send',那么您无法通过awk传输它,因为ls将是一个sftp服务器命令,并且sftp服务器接口上没有awk。
  3. 最后,我不认为发送echo输出到生成的sftp会话是你想要的。 我猜你想把它显示在本地机器上。 所以TCL命令'puts'就是你想要的。

所以你需要做的是将ls命令发送到sftp服务器,然后使用expect和正则表达式从返回的输出中获取时间戳。

可能有更优雅的方法来修饰这只猫,但假设几个月的英语,并且你的文件名总是相同的(my.csv),这是该脚本的一个工作变体(在TCL 8.4.13上):

spawn sftp user@host
expect "assword:"
send "mypassword\r";
expect "sftp>"
send "ls -la my.csv\r"
expect -re "\[-rwx\]{10}.*((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec).*)my.csv"
set timestamp $expect_out(1,string)
expect "sftp>"
send "quit\r";
expect eof
puts "Timestamp is: $timestamp"

我会留下错误控制,处理超时和所有好东西给你。 :-)

如果在您的环境中有效,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM