2017-04-08 2 views
0

J'ai 2 scripts l'un est software.sh et l'autre timer.sh tous deux sont exécutés dans des terminaux séparés. Je veux l'instruction if qui vérifie la durée d'exécution du logiciel à vérifier en permanence, mais apparemment il n'est vérifié une fois au début de l'exécution :(Continous Si instruction

C'est le timer.sh qui obtient le PID software.sh et compte son temps de fonctionnement

#!/bin/bash 
while ((1)); do 
PID_Ardu=$(pidof arducopter) 
Time= ps -p $PID_Ardu -oetime= | tr '-' ':' | awk -F: '{ total=0; m=1; } { for (i=0; i < NF; i++) {total += $(NF-i)*m; m *= i >= 2 ? 24 : 60 }} {print total}' 
if [[ $Time < 20 ]]; then **#THIS SHOULD BE EXECUTED CONTINOUSLY** 
     echo $Time 
else 
     echo INSIDE 
     ps -ef | grep software| grep -v grep | awk '{print $2}' | xargs kill 
fi 
done  

C'est software.sh qui exécute différents fichiers générés

#!/bin/bash 
chmod a+x *.exp 


./ACCF01.exp | wait |echo "FINISHED SCRIPT 1" #Run the ACCF01 script 

sed -i '/ACCF01.exp/d' ./software.sh #Delete previous line after finishing execution. 

./ACCF02.exp | wait |echo "FINISHED SCRIPT 2" 

sed -i '/ACCF02.exp/d' ./software.sh 

./ACCF03.exp | wait |echo "FINISHED SCRIPT 3" 

sed -i '/ACCF03.exp/d' ./software.sh 

./ACCF04.exp | wait |echo "FINISHED SCRIPT 4" 
+0

Exécutez-le avec 'bash -x timer.sh' ou insérez' set -x', il affichera les commandes qu'il exécute. – eckes

+0

Pas de chance :(J'ai aussi essayé d'exécuter le script lui-même à l'intérieur de l'instruction if pour s'assurer qu'il s'exécute en continu mais toujours ... l'instruction if ne s'exécute qu'au début –

+0

Que voulez-vous dire sans chance? donc nous pouvons l'analyser, s'il vous plait – eckes

Répondre

0

la variable Time est attribué une chaîne, pas la valeur de retour de t Il pipeline, car il doit l'inclure dans $(..) ou des guirlandes.

Dans tous les cas, le If est exécuté plusieurs fois, il n'a aucune valeur numérique changeante dans la variable.

Lorsque vous essayez de déboguer des boucles et des affectations de variables, vous pouvez utiliser set -x ou commencer par bash -x time.sh dans le futur. Il imprimera toutes les lignes exécutées et les variables développées.