2013-07-15 75 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 

只要程序由於錯誤退出,它將被重新啓動。如果你退出它,劇本將停止。