使用Windows路径转义变量

时间:2013-01-15 11:56:22

标签: bash shell

我使用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等等)?

2 个答案:

答案 0 :(得分:0)

不要认为有一个好方法可以做到这一点。我能想到的两个选择。你可以用引号拧紧,直到它是正确的。但这很麻烦,会丢失很多代码可读性。

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

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

可以找到在变量中操作字符串的更多细节here希望这有帮助

答案 1 :(得分:0)

找到了一些解决方案:

send "cd $(printf '%q' $2)\r"