Linux

期望腳本 - 發送帶有變數的文件名

  • May 28, 2020

我想創建一個腳本,以便從 SFTP 伺服器複製最新文件,為此我創建了一個獲取名稱並將名稱放入文件的腳本。

現在我想創建另一個腳本來下載我有名字的最新文件,但我正在努力將我的文件內容傳遞給一個變數,然後下載該文件。

#!/bin/bash

set name "testnamefromfile"

expect << 'EOS'
spawn sftp -P 2222 admin@172.22.44.37:/var/log/datarecord
expect "admin@172.22.44.37'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""

在你的腳本中,你有

  set name "testnamefromfile"

但這會將變數設置$1name並將變數設置$2testnamefromfile

然後你有

expect << 'EOS'

正如'EOS'所引用的那樣,“heredoc”中不會發生變數替換。

以下可能會更好(未經測試,發送密碼時也將 \n 更改為 \r)。

#!/bin/sh

name="testnamefromfile"

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

引用自:https://unix.stackexchange.com/questions/589447