2011-10-27 19 views
5

यह मेरे foobar.sh के लिए कोड है:खाली/खाली grep वापसी के साथ वक्तव्य करते हैं?

!#/bin/bash 
while [ 1 ] 
do 
    pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 
    echo $pid 
    if [ "$pid"="" ] 
    then 
      echo "Process has ended lets get this show on the road..." 
      exit 
    else 
      echo "Process has not ended yet" 
    fi 
    sleep 6 
done 

मैं मूल रूप से एक इन्फिनेट लूप चला रहा हूं जो निगरानी की प्रक्रिया समाप्त होने के बाद कमांड एक्स निष्पादित करेगा लेकिन मुझे निम्न स्क्रिप्ट loops के रूप में निम्न संदेश प्राप्त हो रहा है:

./foobar.sh: line 7: [: missing `]' 
Process has not ended yet 

क्या स्क्रिप्ट को स्वीकार करने का कोई तरीका है कि शून्य फ़ीड वापस मेरे 'फिर' कथन को ट्रिगर करेगा और कमांड एक्स निष्पादित करेगा क्योंकि यह वर्तमान विधि पसंद नहीं कर रहा है।

उत्तर

9

बजाय

if [ "$pid"="" ] 

कृपया

if [ "$pid" = "" ] 

कोशिश खाली स्थान के = महत्वपूर्ण है चारों ओर है।

तुम भी cabn

if [ -z "$pid" ] 
+0

उत्कृष्ट बहुत बहुत धन्यवाद! – bikerben

3

मैं

while pgrep -fl "mylittleprogram"; do sleep 6; done 
exit # process has ended 

(pgrep में पैकेज psmisc IIRC है)

मैं सिर्फ यह परीक्षण किया है करना चाहते हैं। यदि आप चुप रहने का इंतजार करना चाहते हैं तो आप pgrep से /dev/null के आउटपुट को रीडायरेक्ट कर सकते हैं। कुछ और मसाला बातें अबाधित बनाने के लिए जोड़ें:

{ 
    trap "" INT 
    while pgrep -fl "mylittleprogram" >/dev/null 
    do 
     sleep 6 
    done 
    true 
} && exit 
1

कोशिश शून्य परीक्षण if [ -z "$pid" ]

0

अस्पष्ट मिलान करने के बजाय द्वारा प्रदान की है:

pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'` 

... और पुरातन बैकटिक वाक्य रचना, इस पर विचार जो प्रक्रिया बेसनाम को बिल्कुल मेल खाता है और आपकी पसंद का एक आउटपुट प्रारूप बनाता है (यहां, प्रक्रिया पिड मौजूद होने पर):

pid=$(ps -C mylittleprogram -opid=) 

फिर, जैसा कि बताया गया है, बस एक खाली मूल्य के लिए परीक्षण:

[ -z "${pid" ] && echo "no process" || echo "I live as $pid" 

बराबर के चिह्न उत्पादन तत्व नाम निम्नलिखित शीर्षक है कि आप सामान्य रूप से मिलेगा दबा देता है। प्रबंधन आपके दोस्त हैं।

संबंधित मुद्दे