2013-07-15 76 views
1

打开一个程序是否有执行bash脚本的方式,当我点击喜欢在Ubuntu 的NetBeans或投寄箱程序,并执行一个bash脚本时退出它如何运行bash脚本时LIUNX

我的想法创建的bash上的cronjob脚本@reboot检查每一秒,如果程序在当前进程

#!/bin/bash 
NameOfprogram="NetBeans" 
while [[ true ]]; do 
    countOfprocess=$(ps -ef |grep $NameOfprogram | wc -l) 
    if [[ $countOfprocess -gt 1 ]]; then 
     #execute bash 
    fi 
    sleep 1 
done 

存在,但我觉得这个想法不是最好的,有没有更好的方法去实现它?

+4

这听起来像是一个简单问题的尝试不良解决方案... –

+1

'while [[true]]'是检查字符串“true”是否为空。它适用于无限循环,但是显示了一些关于'[['如何工作。 '而[[false]]'会有相同的结果。 'while true'执行内置的'true'。 – jordanm

+0

@Ignacio Vazquez-Abrams有什么更好的解决方案? – Steve

回答

2

更好的方法是将可执行文件包装在脚本中。这意味着你将一个脚本的程序名称放在你的路径中(可能是$HOME/bin),Linux将使用该脚本代替真实的可执行文件。现在

您可以使用执行真正的程序:

/usr/bin/NetBeans "[email protected]" 

所以要执行真正的可执行,你只要把绝对路径名称前面。奇怪的"[email protected]"也传递了任何人可能给脚本的参数。

把循环解决此问题:

while [[ true ]]; do 
    /usr/bin/NetBeans "[email protected]" 
done 

但有一个问题:你不能再退出该计划。只要您尝试,它会重新启动。所以如果你只是想当它重新启动时崩溃:

while [[ true ]]; do 
    /usr/bin/NetBeans "[email protected]" && exit 0 
done 

只要程序由于错误退出,它将被重新启动。如果你退出它,剧本将停止。