sh/bash/dash/ksh/zsh等Shell脚本
-
gabrielxiao
- 帖子: 4
- 注册时间: 2009-05-23 19:26
#1
帖子
由 gabrielxiao » 2010-01-19 19:09
我有一段脚本在ubuntu下试了半天都不行希望大家能帮一下忙,要求其实很简单就是运行gapa.exe后关闭他,但试了很多次后就是不行
#!/bin/sh
wine gapa.exe
wineserver -k
在win下用DOS批处理很简单
@echo off
cd 路径
start 程序
taskkill /im 程序
exit
但在ubuntu下就是搞不懂:(
-
leeaman
- 帖子: 30702
- 注册时间: 2007-02-02 18:14
- 系统: debian sid
#2
帖子
由 leeaman » 2010-01-19 19:11
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
-
O_O_BOT
- 帖子: 2461
- 注册时间: 2009-05-20 19:32
#3
帖子
由 O_O_BOT » 2010-01-19 19:15
irc <jaua^> say: 退出脚本不是有个exit 0么
-
gabrielxiao
- 帖子: 4
- 注册时间: 2009-05-23 19:26
#4
帖子
由 gabrielxiao » 2010-01-19 19:43
问题是运行到
wine gapa.exe
这一步后就卡住了,除非手动退出gapa.exe
不然根本就不会执行下一步
wineserver -k来自动关闭
-
BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
-
联系:
#5
帖子
由 BigSnake.NET » 2010-01-19 19:51
#!/bin/sh
wine gapa.exe &
wineserver -k
^_^ ~~~
要理解递归,首先要理解递归。
地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
-
gabrielxiao
- 帖子: 4
- 注册时间: 2009-05-23 19:26
#6
帖子
由 gabrielxiao » 2010-01-19 21:33
BigSnake.NET 写了:#!/bin/sh
wine gapa.exe &
wineserver -k
试了不过还是不行,因为“&”是一个并列执行的符号,所以“wine gapa.exe"和"wineserver -k"是同时进行的,根本不能用“wineserver -k"来结束gapa.exe,就像下面
#!/bin/sh
a="test"
a="aaa" &
echo $a
exit 0
输出的是test
#!/bin/sh
a="test"
a="aaa"
echo $a
exit 0
输出的是aaa
-
yingfei
- 帖子: 273
- 注册时间: 2007-09-03 18:34
- 来自: 羊城通
#7
帖子
由 yingfei » 2010-01-20 10:04
你可以 sleep 几秒再 -k 吗。
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#8
帖子
由 c\nc » 2010-01-20 16:16
试试
代码: 全选
wine gapa.exe &
wait $(pidof gapa.exe) && wineserver -k
-
gabrielxiao
- 帖子: 4
- 注册时间: 2009-05-23 19:26
#9
帖子
由 gabrielxiao » 2010-01-20 18:34
首先感谢yingfei的提醒
yingfei 写了:你可以 sleep 几秒再 -k 吗。
用sleep后的确成功了
代码: 全选
#!/bin/sh
wine gapa.exe &
sleep 时间
wineserver -k
exit 0
另外关于
c\nc 写了:试试
代码: 全选
wine gapa.exe &
wait $(pidof gapa.exe) && wineserver -k
试过了不行,不过还是要感谢你的热心帮助!
-
c\nc
- 帖子: 231
- 注册时间: 2007-12-25 12:51
#10
帖子
由 c\nc » 2010-01-21 1:39
我理解错楼主意图了,我以为是wine不能彻底退出。
-
cosechy
- 帖子: 82
- 注册时间: 2008-03-06 4:56
#11
帖子
由 cosechy » 2010-01-21 4:32
6楼的原因是,以&结尾的命令会在一个子shell中运行,修改变量不会互相影响,不是简单的时间问题
不太了解wineserver -k的原理,不过要是通过kill/killall结束程序的话,这问题大概是因为term信号初始的处理方式不是退出(但是文档里写的是。。),必须得等一个程序完全运行起来之后才能修改term的处理方式,然后才能被kill
可以改成用kill信号结束,要是感觉太暴力了可以用hup或者int,经测试也没问题
简单的说就是 xxx & kill $! 不会结束,改成 xxx & kill -hup $! 就可以了
wine的话你可以试试-k1或者-k2或者-k9
用延时的方法毕竟不保险。。万一运行的程序多系统比较慢的话说不定还是会出问题
不过这要求也真怪。。需要运行之后马上关闭的话不如直接判断一下,在这种情况下就不要运行吧
-
pandafq
- 帖子: 68
- 注册时间: 2008-01-06 16:03
#12
帖子
由 pandafq » 2010-02-23 11:08
试试这个,估计可以
代码: 全选
#!/bin/sh
wine gapa.exe 1>/dev/null 2>/dev/null &
wineserver -k
我是一只小菜鸟呀,咿呀咿呀呦~~~~~~~~~~