Est-il possible d'exécuter un script shell en ligne de commande comme ceci:
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>
L'exemple ci-dessus ne fonctionne pas, je n'obtiens que le caractère >
, pas le résultat que j'essaie d'obtenir, c'est "vrai"
Lorsque j'exécute ps -ef | grep -c "myApplication
, j'obtiens une sortie. Est-il possible de créer un résultat à partir d'une seule ligne dans un script? Je vous remercie
Cela ne fonctionne pas car vous avez manqué fi
pour mettre fin à votre déclaration if
.
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
Vous pouvez le raccourcir davantage en utilisant:
if [ $(ps -ef | grep -c "myApplication") -eq 1 ]; then echo "true"; fi
Notez également le problème de ps -ef | grep ...
correspondant à celui mentionné dans la réponse de @DigitalRoss .
En fait, vous pouvez faire mieux en utilisant pgrep
:
if [ $(pgrep -c "myApplication") -eq 1 ]; then echo "true"; fi
Cela presque a fonctionné. La syntaxe correcte est la suivante:
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true"; fi
Mais notez que, dans une expression de ce type impliquant ps
et grep
, la grep
correspond généralement à elle-même car les caractères "grep -c Myapplication" apparaissent dans la liste ps Il y a plusieurs façons de contourner cela, l'une d'entre elles est de grep pour quelque chose comme [M]yapplication
.
D'autres réponses ont résolu votre erreur de syntaxe, mais je vous suggère fortement de modifier la ligne en:
test $ (ps -ef | grep -c monApplication) -eq 1 && echo true
Si vous n'essayez pas de limiter le nombre d'occurrences à exactement 1 (par exemple, si vous essayez simplement de vérifier la ligne de sortie myApplication et que vous vous attendez à ce qu'elle n'apparaisse jamais plus d'une fois), faites simplement:
ps -ef | grep monApplication>/dev/null && echo true
(Si vous avez besoin du jeu de compteurs de variables pour un traitement ultérieur, aucune de ces solutions ne sera appropriée.)
Utilisation de && et || court-circuités opérateurs est souvent beaucoup plus clair que l’incorporation de constructions if/then, en particulier dans les doublures.
J'utilise Mac OS et j'ai très bien suivi
$ counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ]; then echo "true";fi;
vrai
Il faut de l'espace après [et avant]
J'avais du mal à combiner les deux lignes multiples, alimenter la commande et obtenir ses résultats dans une variable (pas un fichier) et trouver cette solution:
FRA_PARAM="'db_recovery_file_dest'"
FRA=$(
sqlplus -S "/as sysdba" <<EOF
set echo off head off feed off newpage none pages 1000 lines 1000
select value from v\$parameter where name=$FRA_PARAM;
exit;
EOF
)
Notez que Word a été remplacé par des guillemets simples, car sinon, je recevais sa substitution automatique en guillemets doubles ... ksh, HP-UX.
Espérons que cela sera utile pour quelqu'un d'autre aussi.