【发布时间】:2013-05-15 13:48:21
【问题描述】:
我有一个脚本,用于通过 telnet 会话发送多个命令。我不确定是否需要转义字符。如果我直接在 telnet 会话中键入命令,它会起作用并且我会得到预期的响应。但是,当我将它放在脚本中时,它不起作用。
真正奇怪的是,我将其中一个命令放入了 echo 中,得到的结果与从 telnet 提示符中得到的结果相同……这让我相信我需要转义某些字符,但是一直是我的问题。
我尝试过使用睡眠命令,但这似乎并没有改变任何东西......
这是sn-p:
pushSAT() {
#This is what the command should look like:
#EPHM:FPSH,satellite,ephemeris_code,file_name,cmd_action<cr><lf>
HOST=$1
SATS=( $(grep O3B_M* $DIR/$FILE2ACU) )
for i in "${SATS[@]}"
do
echo "$i"
echo "EPHM:FPSH,$i,202,$FILE2ACU,@";
(sleep 2
echo "EPHM:FPSH,$i,202,$FILE2ACU,@";
sleep 1
echo "TGTS:FLST,?";
sleep 1
echo "^]";
sleep 1
echo "logout";
) | telnet $HOST 6100 | tee acuresponse.txt
log user.info "Pushed $FILE2ACU to $HOST for $i."
done
}
这是来自 echo 和 telnet 的响应;注意它被切断的地方......奇怪!
Loading satellites to ant-3-acu
O3B_M001
,202,ephemeris.txt,@"
这就是问题所在;为什么会被切断?
而且,这是我对失败的命令的期望:
Connected to ant-3-acu (ip).
Escape character is '^]'.
EPHM:FPSH,O3B_M001,202,ephemeris.txt,@
ephm:fpsh,0,0
【问题讨论】:
-
有
\r\n-pair 和空白问题的迹象。您能否发布几行将由您的grep命令输出的行? -
您可能还想查看
expect实用程序。 -
@chepner Telnet 完全处理线路上的 \r\n,它应该理解与 echo 在输出中使用的(键盘)输入相同的换行符吗?
-
我不太担心
telnet,而是担心提供SATS数组的文件的内容。我的印象是Loading satellites....et al 来自第一对echo语句,而不是输出通过管道传送到telnet的语句。 -
@chepner 是的,我明白了,$i 中有一个流氓换行符。