Linux 在telnet会话中使用变量
我有一个脚本,用于使用telnet会话发送多个命令。我不确定我是否需要转义字符。如果我直接在telnet会话中键入该命令,它就会工作,并得到预期的响应。但是,当我把它放在脚本中时,它不起作用 而真正奇怪的是,我把其中一个命令放在了echo中,我从telnet提示符中得到了相同的命令……这让我相信我需要逃避某些字符,但这一直是我的问题 我尝试过使用sleep命令,但是这似乎并没有改变任何事情 以下是片段:Linux 在telnet会话中使用变量,linux,bash,telnet,Linux,Bash,Telnet,我有一个脚本,用于使用telnet会话发送多个命令。我不确定我是否需要转义字符。如果我直接在telnet会话中键入该命令,它就会工作,并得到预期的响应。但是,当我把它放在脚本中时,它不起作用 而真正奇怪的是,我把其中一个命令放在了echo中,我从telnet提示符中得到了相同的命令……这让我相信我需要逃避某些字符,但这一直是我的问题 我尝试过使用sleep命令,但是这似乎并没有改变任何事情 以下是片段: pushSAT() { #This is what the command shou
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
}
问题就在这里,;为什么会被切断
这就是我对失败的命令的期望:
Connected to ant-3-acu (ip).
Escape character is '^]'.
EPHM:FPSH,O3B_M001,202,ephemeris.txt,@
ephm:fpsh,0,0
^]表示控制/]。您发送的信息不正确。将其作为文本“^]”发送将不起作用。所以注销可能永远不会发生
不管剩下的问题是什么,我肯定它们存在,我怀疑它们与你的头衔有任何关系。您的问题实际上只是关于脚本编写。这可能无法解决所有问题,但这将是一个开始。因为您的输入文件有空格,所以您需要更改读取它的方式 变化
while
循环从grep
的输出一次读取一行dos2unix
的程序删除它们,因为read
命令不会删除它们
pushSAT(){
#这是命令的外观:
#EPHM:FPSH、卫星、星历代码、文件名、命令动作
主机=$1
grep'O3B_M*'“$DIR/$FILE2ACU”|而read-r行;
做
回音“$line”
echo“EPHM:FPSH,$line,202,$FILE2ACU,@”
(睡眠2
echo“EPHM:FPSH,$line,202,$FILE2ACU,@”
睡眠1
回声“TGTS:FLST,?”
睡眠1
printf“\035\n”
睡眠1
回显“注销”
)| telnet$HOST 6100 | tee acurresponse.txt
log user.info“为$line将$FILE2ACU推送到$HOST。”
完成
}
有迹象表明\r\n
-配对和空白问题。您可以发布几行将由grep
命令输出的内容吗?您可能还需要查看该实用程序。@chepner Telnet完全负责\r\n线路,它应该理解与(键盘)相同的换行符echo在输出时使用的输入肯定吗?我不太担心telnet
,我更担心的是为SATS
阵列提供数据的文件的内容。我当时的印象是,加载卫星….
等来自第一对echo
语句,而不是输出通过管道传输到telnet
的语句>@chepner是的,我明白了,在$I里面有一条流氓新线。这是一个问题,但可能不是唯一的问题。
Connected to ant-3-acu (ip).
Escape character is '^]'.
EPHM:FPSH,O3B_M001,202,ephemeris.txt,@
ephm:fpsh,0,0
pushSAT() {
#This is what the command should look like:
#EPHM:FPSH,satellite,ephemeris_code,file_name,cmd_action<cr><lf>
HOST=$1
grep 'O3B_M*' "$DIR/$FILE2ACU" | while read -r line;
do
echo "$line"
echo "EPHM:FPSH,$line,202,$FILE2ACU,@"
(sleep 2
echo "EPHM:FPSH,$line,202,$FILE2ACU,@"
sleep 1
echo "TGTS:FLST,?"
sleep 1
printf "\035\n"
sleep 1
echo "logout"
) | telnet $HOST 6100 | tee acuresponse.txt
log user.info "Pushed $FILE2ACU to $HOST for $line."
done
}