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
}
我有一个脚本可以使用 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
}