Linux
期望腳本 - 發送帶有變數的文件名
我想創建一個腳本,以便從 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"
但這會將變數設置
$1
為name
並將變數設置$2
為testnamefromfile
。然後你有
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