Ajouter des "" dans le texte d'une variable

Bonjour,

Je voudrais arriver à produire un format JSON du style :

Le problème est qu’avec mon script je n’arrive pas a mettre des " j’obtiens :

SERVICES[0]="apache2"
SERVICES[1]="sshd"
SERVICES[2]="php"

JSON="\"Services\": {"

for i in ${SERVICES[*]}
        do
                if ps ax | grep -v grep | grep ${i} > /dev/null ; then
                        JSON=$(eval echo -n $JSON "\"$i\"" : "\"running\"",)
                else
                        JSON=$(eval echo -n $JSON "\"$i\"" : "\"not running\"",)
                fi

        done
echo $JSON

Une idée ?

Merci

[quote=“seb”]if ps ax | grep -v grep | grep ${i} > /dev/null ; then JSON=$(eval echo -n $JSON "\"$i\"" : "\"running\"",) else JSON=$(eval echo -n $JSON "\"$i\"" : "\"not running\"",) fi [/quote]

C’est le eval qui fout le souk. D’ailleurs tu te compliques bien la vie à lancer un sous-shell et à en capturer le résultat, quand tu pourrais simplement faire :

(pareil pour “not running”)

Et même remarque que pour ton post précédent (wget/curl) : pense à mettre tes variables entre guillemets pour ne pas avoir de surprises. Par défaut, tu devrais utiliser des guillemets partout. Il est très rare de vouloir spécifiquement le comportement “sans guillemets”.

Salut,

supprime les eval + echo inutiles et ça marchera mieux :

if ps ax | grep ${i} | grep -v grep > /dev/null ; then
  JSON="$JSON \"$i\": \"running\","
else
  JSON="$JSON \"$i\": \"not running\","
fi

par ailleurs ton grep -v grep n’était pas au bon endroit.
tu pourrais également remplacer toute la ligne ps/grep par pidof, qui est nettement plus simple.

Bonjour,

Merci pour les remarques, je vais essayer :023

@syam

[quote]Et même remarque que pour ton post précédent (wget/curl) : pense à mettre tes variables entre guillemets pour ne pas avoir de surprises. Par défaut, tu devrais utiliser des guillemets partout. Il est très rare de vouloir spécifiquement le comportement “sans guillemets”.
[/quote]
Oui… Je vais regarder plus en détail !