我想创建一个脚本,以便从 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"
但这将变量设置$1
为name
并将变量设置$2
为testnamefromfile
。
那么你就有了
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