【发布时间】:2017-11-08 23:12:09
【问题描述】:
我有以下脚本:
#!/bin/bash
echo -n "Enter user name: "
read USER
echo -n "Enter password: "
read -s PWD
cat $HOME/etc/switches.txt | while read IP SWITCH
do
echo ${SWITCH}
/usr/bin/expect <<EOD
# Change to 1 to Log to STDOUT
log_user 1
# Change to 1 to enable verbose debugging
exp_internal 1
# Set timeout for the script
set timeout 20
spawn ssh -l {$USER} -oCheckHostIP=no -oStrictHostKeyChecking=no -q $IP
match_max [expr 32 * 1024]
expect "Password:"
send $PWD
send "\n"
expect "#"
send "show fcip summary | grep TRNK\n"
EOD
echo
done
当我运行它时,用户名中的反斜杠消失了,结果如下:
Enter user name: corp\user
Enter password:
=== ss3303-m-esannw-m01a ===
spawn ssh -l corpuser -oCheckHostIP=no -oStrictHostKeyChecking=no -q 10.247.184.70
[...]
我怀疑我的问题部分是由于将我的期望脚本嵌入到 bash 脚本中。我也尝试过使用 $USER 和 "$USER",结果相同。使用 corp\\\\user (是的,四个反斜杠!)确实有效,但不方便。我正在认真考虑使用 sed 或其他东西来增加反斜杠,但很想听听其他想法。
【问题讨论】:
-
是的,反斜杠经过特殊处理,因此您必须使用其中的两个。不过,不太清楚为什么这种情况需要四个。