【问题标题】:how to ignore the backslash in expect script如何忽略期望脚本中的反斜杠
【发布时间】:2013-07-29 07:01:26
【问题描述】:

我创建了以下脚本(在 ksh 下),

为了将文件data.txt从Linux机器复制到windows机器

expect 会自动执行 scp 进程,所以密码问题会由 expect 来回答

问题是expect不能忽略下一行中的“\”反斜杠

   spawn  scp   /tmp/data.txt  ADMIN@192.9.200.17:'c:\'

所以从输出中我看到期望发送没有“\”反斜杠的行

我的语法/脚本需要改变什么,所以期望会忽略反斜杠?

我的脚本

  #!/bin/ksh




 PASSORD=secret123


 SCP=`cat << EOF
 set timeout -1


spawn  scp   /var/tmp/data.txt  ADMIN@192.9.200.17:'c:\'
       expect {
                 ")?"   { send "yes\r"  ;          exp_continue  }                                
                 word:  {send $PASSORD\r}
              }
  expect eof
  EOF`



  expect -c  "$SCP"

.

结果(输出)

 spawn scp /var/tmp/data.txt ADMIN@192.9.200.17:'c:'
 gcs@198.202.183.97's password: 
 scp: c:: Error opening file: The requested operation failed.
 Killed by signal 1.

【问题讨论】:

  • 尝试使用 'c:/' 代替,可能会评估到相同的路径。
  • 是的,你现在做对了,谢谢分配
  • 回答这个,我会投票,
  • 将我的回复标记为答案,以便其他用户知道解决方案是什么:)

标签: linux windows tcl expect scp


【解决方案1】:

改用spawn scp /tmp/data.txt ADMIN@192.9.200.17:'c:/',因为它应该评估为相同的路径。

【讨论】:

    【解决方案2】:

    你需要转义\

    试试

    spawn  scp   /tmp/data.txt  ADMIN@192.9.200.17:'c:\\'
    

    【讨论】:

    • 运行脚本时得到的输出是什么?你能scp 从 shell(不在期望脚本中)到 Windows 框吗?
    • 那么可能期望脚本不是问题所在。你的 Windows 机器可能不是运行的 SSH/SCP 服务器
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2020-10-23
    相关资源
    最近更新 更多