linux - 带有 expect spawn 的管道输出

标签 linux bash expect spawn

我有通过 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/

相关文章:

linux - 树莓派2 : routing table has no the specified gateway

linux - 我们可以使用 __libc_stack_end 来确定 linux 上的堆栈结束吗?

用于计算文件中相似词的 Linux shell 脚本

linux - 如何在 Linux 上使用 tr 或 mv 仅将文件名中的第一个字母大写?

arrays - 从 Bash 函数返回数组

c++ - 如何将以微秒为单位的纪元时间转换为可读格式

bash - 命令未找到 : complete

linux - 没有 key 的 ssh 并使用 bash 脚本收集输出

mysql - 如何在expect/TCL脚本中从转储文件创建MySQL数据库?

mysqldump : Couldn't find table: "|"