0
votes

Commande exécute fin en borne, pas dans un script Bash

J'essaie:

#!/bin/bash
if $(ps -C "bm_d21_debug")
then
    kill $(ps -C "bm_d21_debug" -o pid=)
    echo "exists"
fi


4 commentaires

Je suggère: si PS -C "bm_d21_debug"


Vous voudrez lire la page pkill man '. Ça va vous rendre la vie plus facile.


C'est juste étrange que si je copie et coller tuer $ (PS -C "BM_D21_DEBUG" -O PID =) Cela fonctionne bien. Mais si je copie et coller tout ce bloc, il meurt sur cette ligne: tuer $ (PS -C "BM_D21_DEBUG" -O PID =


shellcheck détecte automatiquement Ce problème . Vous pouvez avoir votre éditeur sur la volée.


3 Réponses :


0
votes

Je suggère d'utiliser des crochets également: xxx

mais cette commande retournera toujours "oui" ($? = 0)


1 commentaires

Les crochets carrés me font peur, mais je l'ai réparé en passant à ce code: Stackoverflow.com/a/54846069/11107107 Merci!



0
votes

corrigé en passant à la section

if ps aux | grep ./bm_d21_debug | grep -v grep >/dev/null;then
    pid=$(ps aux | grep ./bm_d21_debug | grep -v grep | awk '{print $2}')
    kill $pid
    echo $pid
fi


0 commentaires

3
votes

Considérez cette ligne: xxx

Vous exécutez la commande ps dans une substitution de commande, qui renvoie la sortie de commande. La commande si est alors essuie de exécuter sortie comme une commande .

Le premier Le mot de la sortie PS est pid , lequel si fonctionnera comme nom de commande. Ainsi, la "commande non trouvée" "erreur"

vous voulez juste xxx


1 commentaires

C'était mon problème. Merci!