shell中调用telnet如何确保telnet中的命令执行完毕

fabbymee 2013-09-24 10:23:26
我要在shell中调用telnet,比如:
   
( echo "username"
sleep 2
echo "passwd"
sleep 3
echo "cp fold_A/* fold_B"
sleep 1
echo "$SQL"
echo "COMMIT;"
sleep 1
echo "quit;"
echo "exit"
)|telnet 135.0.88.80

sleep得写,要不然后面命令会快速执行掉,会引起混乱。
但是我不确定有些命令到底要执行多久才能执行完毕,比如cp fold_A/* fold_B 这个命令,
sleep 1时间未必足够。

有谁知道这个问题该怎么解决吗?
还有telnet的时候if else 这些条件语句该怎么写额?
...全文
2152 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fabbymee 2015-07-14
  • 打赏
  • 举报
回复
telnet.sh #!/usr/bin/expect expec << EOF spawn telnet 182.119.xxx.xxx expect "login:" send "your username\r" expect "Password:" send "your password\r" expect "$" send "#!/bin/ksh\r" expect "$" send "cd testfolder\r" expect "$" send "touch t.txt\r" expect "$" send "exit\r" ./telnet.sh运行 注意telnet.sh要有执行权限 \r没有这个就需要手动回车,不然会一直等着 在执行这个脚本的时候,还可以在本机进行其他操作,相互不影响 我自己找到方法了 http://blog.csdn.net/fabbychips/article/details/23457073
糊涂的小白 2013-09-27
  • 打赏
  • 举报
回复
好吧,不管用。
糊涂的小白 2013-09-27
  • 打赏
  • 举报
回复
可以考虑把你需要执行的命令串,用echo或者cat的方式在远端生成一个shell脚本, 然后执行这个脚本,就可以保证是串行的了。

(
sleep 1
echo "lphu"
sleep 2
echo "1"
sleep 3
cat << EOF
cat >/dev/shm/2.sh << EOF2
#!/bin/sh
echo "hello world"
EOF2
EOF

echo "sh /dev/shm/2.sh"

sleep 1
exit
)|telnet 135.0.88.80
中间的
echo "hello world"
就是你需要在远端执行的命令。
糊涂的小白 2013-09-27
  • 打赏
  • 举报
回复
脚本cmd.sh

if [ -z "${MY_SIGN}" ];
then
        exit 1
fi
rm -rf ${MY_SIGN}

sleep 1
echo "username"
sleep 2
echo "password"
sleep 3
cat << EOF
cat >/dev/shm/2.sh << EOF2
#!/bin/sh
echo "hello world1"
sleep 10
echo "hello world2"
sleep 1
exit
EOF2
EOF

echo "source /dev/shm/2.sh"

while [ ! -f ${MY_SIGN} ];
do
sleep 1
done
执行命令:

MY_SIGN=/tmp/sign; (sh cmd.sh ) | (telnet localhost; touch ${MY_SIGN})
ljc007 2013-09-25
  • 打赏
  • 举报
回复
可以考虑用expect模拟键盘操作

19,619

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧