0

我有一个使用 telnet 从 debian 连接到 windows 服务器的小脚本。

服务器上有带有 ips 和路径的文本文件:

192.168.1.1 c:\rs_obj\data
192.168.1.2 c:\rs_obj\data
192.168.1.3 c:\new_obj\data

每个服务器都有自己的数据路径。

这是主要脚本

  while IFS=" ": read -r ip path; do
    nohup ./tl.sh $ip $path >> tl_$ip.log &
  done < srv_list.txt

这是 tl.sh

#!/bin/bash
echo $(date) : $1 $2
expect -f-<<EOF
  set timeout 20
  spawn telnet $1

  expect "login: "
  send "...\r"
  expect "password: "
  send "...\r"
  expect "*="
  send 'cd "$2"\r'
  expect "data>"
....
  send "exit\r"
EOF
exit

问题在于 Windows 路径 - 如何在行中传递正确的字符串send "cd $2\r"(转义反斜杠和 \r \n 等)?

4

2 回答 2

0

不要认为真的有什么好方法可以做到这一点。我能想到的两个选择。您可以随意引用报价,直到正确为止。但这很混乱,并且会失去很多代码的可读性。

我的方法是手动转义字符串,例如

path=${2// /\\ } # substitutes all instances of ' ' with '\ ' in path
path=${path//\\/\\\\/} # substitutes all instances of '\' with '\\' in path

可以在此处找到有关在变量中操作字符串的更多详细信息希望这会有所帮助

于 2013-01-15T12:30:19.130 回答
0

找到了一些解决方案:

send "cd $(printf '%q' $2)\r"
于 2013-01-15T12:35:32.160 回答