2016-05-04 9 views
0

Aus irgendeinem Grund bekomme ich nicht die Ausgabe meiner 2. Echo-Linie, wenn ich mein Skript ausführen. Hier ist mein Code-Schnipsel:2. Echo-Anweisung in Bash-Skript funktioniert nicht

IS_RUNNING=$(netstat -anp | grep ":7600" | grep java | awk '{print $7}' | cut -d"/" -f 2) 

    start(){ 
    nohup /bin/su -c "/opt/app/bin/service start" - user &>/dev/null & 
    echo "Starting Services please wait"  
    sleep 30 
    if [ "$IS_RUNNING" = java ]; 
    then 
    echo "Service is now running" 
    exit 0 
    fi 
} 

Interessanterweise. wenn ich es mit laufe:

sh -x ./service start 

Ich bekomme die Ausgabe erwartet und mein 2. Echo wird auf den Bildschirm geschrieben.

+ case "$1" in 
+ start 
+ echo 'Starting Services please wait' 
Starting Services please wait 
+ sleep 30 
+ nohup /bin/su -c '/opt/app/bin/service start' - user 
+ '[' java = java ']' 
+ echo 'Service is now running' 
Service is now running 
+ exit 0 

Ohne sh -x zu verwenden, ich dies einfach erhalten:

[[email protected]]# ./service start 
Starting Services please wait 
[[email protected]]# 

Ich habe ein Gefühl, das ich einfach etwas mit Blick auf bin. Kann jemand helfen?

+0

Ist es nur ich oder ist Ihre 'sh -x' Ausgabe in einer anderen Reihenfolge als die von Ihnen angegebene Quelle? –

+0

Nein, kopiert direkt vom Bildschirm. – user53029

+1

Können Sie diese Frage neu schreiben, um anderen Menschen nützlicher zu sein? Ein anderer Benutzer mit einem Bash-Skript, bei dem das zweite Echo nicht mit Sicherheit funktioniert, wird nicht das selbe zugrundeliegende Problem haben, und daher sind Antworten darauf wahrscheinlich nicht hilfreich für sie. –

Antwort

2

Die Lauflinie wird einmal ausgewertet:

IS_RUNNING=$(netstat -anp | grep ":7600" | grep java | awk '{print $7}' | cut -d"/" -f 2) 

Sie sollten eine Funktion für diese machen oder schließen diese Zeile in der start() Funktion nach dem Schlaf.