UNIX shell 脚本中的嵌套表达式

Nested expression in a UNIX shell script

我有一个脚本可以使用 scp 下载文件,然后通过附加当前日期来保存文件。

我收到错误消息:

local_computer:~ memo$ ./scp_auto_save.sh 
can't read "(date +%d-%m-%y)": no such variable
while executing
"spawn scp "root@ch1.local:/root/*.csv" ./ch1_$(date +%d-%m-%y).csv"
(file "./scp_auto_save.sh" line 4)

代码如下:

#!/usr/bin/expect -f
# connect via scp - ch1
spawn scp "root@ch1.local:/root/*.csv" ./ch1_$(date +%d-%m-%y).csv
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "password\r" 
    } 
}
interact

Q1: 如何正确表达 $(date +%d-%m-%y) inline with the scp command?

Q2: 我有很多文件存储在 20 台远程机器上。如何对每台机器进行 scp?

例如:

spawn scp "root@ch1.local:/root/*.csv" ./ch1_current_date.csv
spawn scp "root@ch2.local:/root/*.csv" ./ch2_current_date.csv
:
:
spawn scp "root@ch20.local:/root/*.csv" ./ch20_current_date.csv

感谢您的帮助。

set date [timestamp %Y-%m-%d]   ; # this is an expect-specific command
set date [clock format [clock seconds] -format %Y-%m-%d]   ; # this works too

set hosts {
    ch1.local
    ch2.local
    ...
}

foreach host $hosts {
    spawn scp "root@$host:/root/*.csv" ./${host}_$date.csv
    expect {
        -re ".*es.*o.*" {
            exp_send "yes\r"
            exp_continue
        }
        -re ".*sword.*" {
            exp_send "password\r" 
        } 
    }
    expect eof
}