Inline si shell script
Est-il possible d'exécuter le script shell en ligne de commande comme ceci :
counter=`ps -ef | grep -c "myApplication"`; if [ $counter -eq 1 ] then; echo "true";
>
Exemple ci-dessus n'est pas de travail, je ne reçois que >
caractère qui n'est pas le résultat que j'essaie de faire, c'est "vrai"
Quand j'execute ps -ef | grep -c "myApplication
- je obtenir 1 sortie. Est-il possible de créer résulter de la seule ligne dans un script ? merci
- Oui, mais il ne fonctionne pas
- vous avez besoin
; then
au lieu dethen;
Vous devez vous connecter pour publier un commentaire.
Il ne fonctionne pas parce que vous avez oublié
fi
à la fin de votreif
déclaration.Vous pouvez la raccourcir en utilisant:
Aussi, prenez note de la question de la
ps -ef | grep ...
correspondant lui-même comme mentionné dans @DigitalRoss réponse.mise à jour
En fait, vous pouvez faire mieux en utilisant
pgrep
:if pgrep myApplication 2>/dev/null; then ...
Pas besoin de crochets ou de la substitution de commande. La parenthèse autour de "m" n'est pas nécessaire, soit depuis pgrep ne correspond pas à lui-même sauf si vous lui dites.then
au mauvais endroit?-c
pour pgrep n'est pas un commutateur valable au moins pour la version 3.2.8 de procps. Il ne fonctionne pas dans mon cas...Oui, avec les problèmes de syntaxe fixe
Que presque travaillé. La syntaxe correcte est:
Mais note que, dans une expression de ce genre impliquant
ps
etgrep
, legrep
correspond en général à lui-même parce que les personnages "grep -c Myapplication" afficher dans le ps la liste. Il existe plusieurs façons de contourner cela, l'un d'eux est de grep pour quelque chose comme[M]yapplication
.D'autres réponses n'ont pas résolu votre erreur de syntaxe, mais je ne saurais trop vous suggérer de changer la ligne:
Si vous n'êtes pas d'essayer de limiter le nombre d'occurrences exactement 1 (par exemple, si vous êtes simplement à essayer de vérifier pour la ligne de sortie myApplication et vous vous y attendez, ne jamais apparaître plus d'une fois) puis il suffit de faire:
(Si vous avez besoin de la variable compteur de fin de traitement, aucune de ces solutions sera le cas).
À l'aide de court-circuit && et || opérateurs est souvent beaucoup plus clair que l'intégration de si/alors constructions, en particulier dans les one-liners.
Je suis sous Mac OS et suit très bien fonctionné
vrai
D'espace est nécessaire après [ et avant ]
J'ai eu du mal à combiner les deux de plusieurs lignes d'alimentation dans la commande et l'obtention de ses résultats dans une variable (pas un fichier) et de venir avec cette solution:
Veuillez noter que des simples guillemets le mot a été remplacé, parce que sinon, j'ai été reçu son autosubstitution guillemets doubles... ksh, HP-UX.
J'espère que ce sera utile pour quelqu'un d'autre aussi.