免费注册 查看新帖 |

Chinaunix

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

shell里执行screen,screen会退出了,请问下怎么解决,谢谢。【已解决】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-17 19:15 |只看该作者 |倒序浏览
本帖最后由 zhengsenlin888 于 2011-05-19 18:28 编辑

需要执行的hello.sh的脚本内容如下:
fivetrees ~ # cat /root/hello.sh
#!/bin/bash

screen -dmS hello  /root/b.sh


fivetrees ~ # cat /root/b.sh
#!/bin/bash

for((i=0;i<15;i++))
do
        echo "now i is $i" >> /tmp/i.txt
        sleep 1
done
fivetrees ~ #

fivetrees ~ #./hello.sh 执行完之后,等b.sh执行内容执行完之后。screen就退出来了,请问下怎么让screen不退出了,谢谢。

fivetrees ~ # screen -ls
No Sockets found in /var/run/screen/S-root.

论坛徽章:
0
2 [报告]
发表于 2011-05-17 22:09 |只看该作者
很简单啊,既然执行完b.sh就退出screen,那就不让b.sh执行完呗

论坛徽章:
0
3 [报告]
发表于 2011-05-18 09:14 |只看该作者
回复 2# shplpy


    谢谢你。那这样就不是我想要的了。呵呵。

也有网友跟你一样的说法。不过那不是我想要的。

问题:那么如何让screen在后台执行完命令继续存在呢?

没找到对应的参数

如果想执行完毕程序还想看里面的内容可以用变通的办法,比如写一个shell脚本,以下是 freebsd测试,所以bash 位置在/usr/local/bin/bash

用了一个死循环,每次都停顿sleep 1秒,这样做完ping动作会无限停止下去,这样变相地保留了屏幕显示

#!/usr/local/bin/bash
ping -c 5 172.16.251.1
while :
do
        sleep 1
done

经过试验 是正确运行的

screen -dmS test /usr/local/bin/bash test.sh
打开screen –r test

发现屏幕停止在了ping那里

论坛徽章:
0
4 [报告]
发表于 2011-05-18 09:31 |只看该作者
回复 3# zhengsenlin888


    这也不是你想要的吧,这个和我说那种无异

循环可以简单点写while :;do :;done

论坛徽章:
0
5 [报告]
发表于 2011-05-18 09:31 |只看该作者
能不能通过这样子,先将screen连接上,指定好screen的名称,然后再连接指定的名称执行命令。

screen -dmS hello
screen -r hello  /root/b.sh (这条语句我不知道参数该怎么写,我就是要在hello这个screen里执行/root/b.sh)

请帮忙再看看,谢谢。

论坛徽章:
0
6 [报告]
发表于 2011-05-19 11:27 |只看该作者
可以放到后台执行

论坛徽章:
0
7 [报告]
发表于 2011-05-19 18:28 |只看该作者
我没有用screen实现了,哈哈。换expect

论坛徽章:
0
8 [报告]
发表于 2011-05-19 19:27 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP