Diffrence entre commande en konsole et script.

Résolu
Bonjour,

Je cherche à arrêter ou démarrer un server VNC.
Pour savoir si celui ci est démarrer voir pour le killer il me faut son pid.
En console
ps -ef | grep x11vnc | grep -v grep | awk '{ print $2 }'

Mais dans un script je n'ai pas le même résultat.
Pourquoi ?
Merci de toute aide.



--
Chercheur en améliorations.

[url]

8 réponses

  1. Contributeur
    Salut,

    Faudrait voir ton script pour te répondre, parce que chez moi le résultat est le même ;-\

    $ pgrep firefox
    3910

    $ echo -e "#! /bin/bash\npgrep firefox" > foo.sh && chmod +x foo.sh

    $ cat foo.sh
    #! /bin/bash
    pgrep firefox

    $ ./foo.sh
    3910

    0
    1. Voila ce que j'ai fait
      if [ -z $1 ];  #vrai si la chaine est vide 
      then
      auto= ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }'
      if [ -z $auto ]; #vrai si la chaine est vide
      then
      $cde= "start";
      else
      $cde= "stop";
      fi
      else
      cde=$1;
      fi

      0
      1. Contributeur
        auto= ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }'

        Pas étonnant que ça ne marche pas ;-((

        auto=$(ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }')

        Mais :
        auto=$(pgrep x11vnc)
        devrait être mieux ;-))
        0
    2. Effectivement ta commande est plus simple et apporte le même résultat. J'ai encore appris quelque chose. Voici ce que j'ai corrigé:
       if [ -z $1 ];  #vrai si la chaine est vide 
      then
      auto= $(pgrep x11vnc)
      if [ -z $auto ]; #vrai si la chaine est vide
      18 then
      19 cde= "start";
      20 else
      21 cde= "stop";
      fi
      else
      cde=$1;
      fi

      Et le résultat:
      + '[' -z ']'
      ++ pgrep x11vnc
      + auto=
      + '[' -z ']'
      + cde=
      + start
      x11vnc-server: ligne 19: start : commande introuvable


      Il semblerait que le mot "start" soit spécial ?
      0
      1. Contributeur
        Il semblerait que le mot "start" soit spécial ?
        Ben c'est surtout que ce n'est pas une commande, mais une option (de la commande) qu'on passe soit à
        service
        soit à
        systemctl
        .

        Sur quel système es-tu ? Debian ou Mageia ?
        0
    3. Là je suis sous mageia donc systemctl
      0
      1. Contributeur
        Donc la commande (en root) est :
        systemctl start x11vnc-server
        0
    4. Ben pas tout à fait. Ce n'est pas un service:
       x11vnc -display :0


      0
      1. Contributeur
        Oups je n'avais pas regardé ton code (le 2nd) en détail ;-\

        Pour déclarer une variable en shell bash, il ne faut pas d'espace autour du signe égale ;-(

        cde="start"
        0
    5. Bizarre, ça fonctionne en console mais pas sur le X
      Désolé, je te mets tout:
      #!/bin/sh

      set -x

      # le nom du service
      SERVICE_NAME=x11vnc
      # le répertoire où se trouvent les exécutables du service
      SERVICE_DIRECTORY=/usr/bin
      # le nom du script de démarrage du service
      SERVICE_STARTUP_SCRIPT="x11vnc -display :0"
      # le nom du script d'arrêt du service
      SERVICE_SHUTDOWN_SCRIPT="kill "

      if [ -z $1 ]; #vrai si la chaine est vide
      then
      pid=$(pgrep x11vnc);
      if [ -z $pid ]; #vrai si la chaine est vide
      then
      cde="start";
      else
      cde="stop";
      fi
      else
      cde=$1;
      fi

      usage()
      {
      echo "-----------------------"
      xmessage "

      Usage: $0
      (stop|start|restart)

      "
      echo "-----------------------"
      }

      service_start()
      {
      xmessage "Starting service '

      ${SERVICE_NAME}'... "
      OWD=`pwd`
      cd ${SERVICE_DIRECTORY} ./;
      ${SERVICE_STARTUP_SCRIPT}
      cd $OWD
      echo "Service '${SERVICE_NAME}' started successfully"
      }

      service_stop()
      {
      xmessage "Stopping service '
      ${SERVICE_NAME}'... "
      OWD=`pwd`
      cd ${SERVICE_DIRECTORY} ./
      ${SERVICE_SHUTDOWN_SCRIPT}' '$auto
      cd $OWD
      echo "Service '${SERVICE_NAME}' stopped"
      }

      case $cde in
      stop)
      service_stop
      ;;
      start)
      service_start
      ;;
      restart)
      service_stop
      service_start
      ;;
      • ) usageesacexit 0

      Dis moi ce que tu en penses. Merci.
      0
      1. Contributeur
        *)                usage
        esac
        exit 0

        Il manque les ";;" après usage ;-(
        0
    6. En console ça marche, mais si je clic directement sur le script en GUI le message de stop apparait systématiquement. Et si je recommance en console, tout va bien. Je ne peux pas cerner le problème..... Sans doute que le script ne s'exécutant pas dans la console bash, les variables déconnent ?
      0
      1. Ca y est j'ai trouvé:
        J'ai remplacé pgrep par pidof
        C'est super.

        Chercheur en améliorations.

        [url]
        0