Expect 脚本 - 发送带有变量的文件名

Expect 脚本 - 发送带有变量的文件名

我想创建一个脚本,以便从 SFTP 服务器复制最新文件,为此我创建了一个脚本来获取名称并将名称放入文件中。

现在我想创建另一个脚本来下载我有名称的最新文件,但我正在努力将文件的内容传递给变量,然后下载该文件。

#!/bin/bash

set name "testnamefromfile"

expect << 'EOS'
 spawn sftp -P 2222 [email protected]:/var/log/datarecord
 expect "[email protected]'s password:"
 send "admin\n"
 expect "sftp>"
 send "get $name\r"
 expect "sftp>"
 send "bye\n"
EOS

这是我的剧本。如何将文件的内容分配给$name变量?以及如何下载该文件?

当我运行此脚本时,它会抛出以下错误:

sftp> can't read "name": no such variable
    while executing
"send "get $name\r""

答案1

在你的脚本中你有

   set name "testnamefromfile"

但这将变量设置$1name并将变量设置$2testnamefromfile

那么你就有了

expect << 'EOS'

正如'EOS'所引用的,“heredoc”中不会发生变量替换。

以下可能效果更好(未经测试,发送密码时也将 \n 更改为 \r)。

#!/bin/sh

name="testnamefromfile"

expect << EOS
 spawn sftp -P 2222 [email protected]:/var/log/datarecord
 expect "[email protected]'s password:"
 send "admin\r"
 expect "sftp>"
 send "get $name\r"
 expect "sftp>"
 send "bye\n"
EOS

相关内容