我有通过 ssh 将一些文件复制到其他服务器的脚本。我正在使用 tar 将文件压缩到 farchive 并从其他机器上的 stdout 解压缩它。
set timeout -1
# user info
set port [lindex $argv 0]
set login [lindex $argv 1]
set password [lindex $argv 3]
set host [lindex $argv 2]
#tar info
set sdir [lindex $argv 4]
set ddir [lindex $argv 5]
spawn tar cf - $sdir | ssh -p $port $login@$host tar xf - -C $ddir
expect "*?(yes/no)" {
send "yes\r"
}
expect "*?assword" {
send "$password\r"
}
expect "#" {
send "ls $ddir -la\r"
}
expect "#" {
send "exit\r"
}
interact
但是'|'不适用于产卵。我试图找到任何解决方案,但没有适合我的方法。你能给我一个关于这个问题的建议吗?
最佳答案
“生成”外壳
set timeout -1
# user info
set port [lindex $argv 0]
set login [lindex $argv 1]
set password [lindex $argv 3]
set host [lindex $argv 2]
#tar info
set sdir [lindex $argv 4]
set ddir [lindex $argv 5]
spawn $env(SHELL)
expect "#" {
send "(tar cf - \$sdir) | (ssh -p \$port \$login@\$host tar xf - -C \$ddir)\r"
}
expect -re "(yes/no)" {
send "yes\r"
}
expect -re "assword" {
send "$password\r"
}
expect "#" {
send "exit\r"
}
interact
关于linux - 带有 expect spawn 的管道输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587478/