免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9184 | 回复: 12
打印 上一主题 下一主题

[其他] bash shell脚本运行后屏幕输出变异常-回车键和空格键无效 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-07-03 15:47 |只看该作者 |倒序浏览


有个古怪的问题请教一下大家,我写了一段shell脚本,脚本自身的功能运行正常。但运行完毕后,我按回车键,发现屏幕并没有变成下一行,而是平移,如下所示:

xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$

如果我输入ls 或者pwd按回车键,命令可以正常被执行,但屏幕上却不会显示ls 或pwd的命令。

经过排查,我发现只要注释掉这一段后我的脚本就正常:
SYSTEM=`sudo nmap -O -T Insane $okip`

if (echo $SYSTEM |grep -Eq "linux_kernel"); then
.....

这就让我更加不解了。我只是简单grep一下nmap扫描的结果,为什么会出现这种情况呢?

请问一下我有什么办法修复这个问题吗? 目前只能先exit 退出登陆,然后重新登陆系统。

谢谢大家花时间来看这个!!!!

论坛徽章:
0
2 [报告]
发表于 2017-07-03 17:00 |只看该作者
本帖最后由 yexingqi 于 2017-07-03 17:02 编辑

贴上我的shell脚本内容:

function nmapallip()
{
#!/bin/bash
#check the hosts belong to win or linux
MAX_THREAD_NUM=50
tmp_fifo_file=/tmp/$$.fifo
mkfifo "$tmp_fifo_file"
exec 9<>"$tmp_fifo_file"
rm "$tmp_fifo_file"
for((i=0;i<$MAX_THREAD_NUM;i++));do
echo
done >&9
while read line2
do
{
read -u 9
{
hostname=`echo $(echo $line2 |awk -F"[;]" '{print $2}')`
okip=`echo $(echo $line2 |awk -F"[;]" '{print $1}'| sed 's/^[ \t]*//g')`


SYSTEM=`sudo nmap -O -T Insane $okip`
........


echo >&9
    }&
}
done <hostlist.txt
wait
exec 9>&-
exit 0
}
nmapallip

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
3 [报告]
发表于 2017-07-03 17:42 |只看该作者
本帖最后由 关阴月飞 于 2017-07-03 17:43 编辑

最好贴一下执行过程来看看


另外可以试试reset命令, 应该是可以修复显示的

论坛徽章:
0
4 [报告]
发表于 2017-07-03 17:52 |只看该作者
本帖最后由 yexingqi 于 2017-07-03 17:53 编辑
关阴月飞 发表于 2017-07-03 17:42
最好贴一下执行过程来看看

您好,谢谢您的回复。

我执行后的结果就是上次说的,运行脚本结束后,按回车键,发现屏幕并没有变成下一行,而是平移,如下所示:

xqye@test-docker:~/odc-scan$ ./3.sh
xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$ xqye@test-docker:~/odc-scan$

如果我输入ls 或者pwd按回车键,命令可以正常被执行,但屏幕上却不会显示ls 或pwd的命令。

xqye@test-docker:~/odc-scan$ /tmp/scan  ### 这里我输入的实际上是pwd的命令,只是屏幕不显示
xqye@test-docker:~/odc-scan$ total 164    ### 这上面我输入的实际上是ls -al命令,只是屏幕不显示
drwxr-xr-x  3 xqye xqye  4096 Jul  3 17:47 .
drwxr-xr-x 52 xqye xqye  12288 Jul  3 17:49 ..
-rwxr-xr-x  1 xqye xqye   776 Jul  3 16:45 3.sh
-rw-r--r--  1 xqye xqye  18145 Jul  3 14:12 7-all-namelist.txt
xqye@test-docker:/tmp/scan$



论坛徽章:
0
5 [报告]
发表于 2017-07-03 17:55 |只看该作者
本帖最后由 yexingqi 于 2017-07-03 17:57 编辑

您是高手~利害,我迷惑好久了,不如您一句话。
不过输入reset命令后是恢复正常了。请问这是怎么回事呢? 为什么一定要加reset命令呢?
运行脚本后我再手动输入reset才能恢复。当我尝试在脚本上加入reset时是无效果的。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
6 [报告]
发表于 2017-07-03 18:09 |只看该作者
回复 5# yexingqi

应该是脚本里有些不可描述的东东被显示在终端上导致神经错乱,我说的执行过程,是指你脚本的执行过程,  
bash -x  xx.sh


然后脚本最好也能贴全

论坛徽章:
0
7 [报告]
发表于 2017-07-03 18:30 |只看该作者
关阴月飞 发表于 2017-07-03 18:09
回复 5# yexingqi

应该是脚本里有些不可描述的东东被显示在终端上导致神经错乱,我说的执行过程,是指你 ...

没有贴得太多主要怕大家看得烦。其实是一个很简单的脚本,就是多线程运行nmap的命令,然后根据结果来区分是windows还是linux系统。我这个脚本出来的数据倒是正确的。

#!/bin/bash
## analyze the OS type
LOG=./3-nmap_result.txt
rm -rf $LOG
touch $LOG

function nmapallip()
{
#!/bin/bash
#check the hosts belong to win or linux
MAX_THREAD_NUM=50
tmp_fifo_file=/tmp/$$.fifo
mkfifo "$tmp_fifo_file"
exec 9<>"$tmp_fifo_file"
rm "$tmp_fifo_file"
for((i=0;i<$MAX_THREAD_NUM;i++));do
echo
done >&9
while read line2
do
{
read -u 9
{
   hostname=`echo $(echo $line2 |awk -F"[;]" '{print $2}')`
   okip=`echo $(echo $line2 |awk -F"[;]" '{print $1}'| sed 's/^[ \t]*//g')`
SYSTEM=`sudo nmap -O -T Insane $okip`
echo "system is $SYSTEM"
if (echo $SYSTEM |grep -Eq "linux_kernel"); then
echo "Linux"
echo -e "$hostname;$okip;linux" >> $LOG
elif (echo $SYSTEM |grep -Eq "windows"); then
echo "windows"
echo -e "$hostname;$okip;windows" >> $LOG
elif (echo $SYSTEM |grep -Eq "cisco"); then
echo "cisco"
echo -e "$hostname;$okip;cisco" >> $LOG
else
echo -e "$hostname;$okip;What?" >> $LOG
fi
echo >&9
    }&
}
done <hostlist.txt
wait
exec 9>&-
}
nmapallip



论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
8 [报告]
发表于 2017-07-04 08:42 |只看该作者
回复 7# yexingqi

cat  -A  hostlist.txt  看看文件内容是啥

论坛徽章:
0
9 [报告]
发表于 2017-07-04 10:23 |只看该作者
回复 8# 关阴月飞

抱歉忘了给这个信息:cat hostlist.txt
10.10.74.1  ;  pvg-sw-02-vlan
10.10.66.10  ;  perf-rome
10.10.66.11  ;  labt-test-19
10.10.66.12  ;  LAB01

......

都是相同格式的内容。

谢谢您了!

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2017-07-04 10:49 |只看该作者
回复 9# yexingqi

脚本文本也看一样,主要是怕你文件格式不对: 用cat -A

cat -A  hostlist.txtcat -A  xxoo.sh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP