Bonjour,
Simplification possible en :#!/bin/sh
pgrep redshift && pkill redshift || redshift -l 48.4:7.6
Et même :
Si celà te convient, très bien, mais il existe des outils déjà pensés
pour gérer les logiciels de type "daemon", les lancer proprement
et les stopper proprement. Je t'invite à voir du côté de runit, packagé
sur debian et très bien documenté. Le simple fait de l'utiliser d'en apprendra
beaucoup sur la gestion des processus sur Unix.
En revanche, je ne peux que déconseiller l'utilisation de killall, ps aux | grep bla bla | xargs kill
et autres sucreries : ce n'est pas fiable et t'amènera à faire des bêtises.
Quelques liens utiles :
http://smarden.org/runit/
http://mywiki.wooledge.org/ProcessManagement]]>
Pour revenir au début, ta condition
if [ $etat_redshift=1 ]
n'est jamais fausse car en bash le = sert aux chaines de caractères. Pour les chiffres, c'est -gt (greater than), -eq (equal) ...
Tu as mis le doigt sur quelque chose, mais ce n'est pas encore ça.
Sa condition est toujours vraie car
est considéré par le shell comme une seule chaîne, et
est toujours vrai (c'est une version implicite de
).
Une façon correcte d'écrire la condition est très proche de ce que tu as proposé :
Ça peut paraître bateau, mais mettre des guillemets doubles autour de toutes
les utilisations de variables permet de résoudre des bugs autrement
mystérieux.]]>
n'est jamais fausse car en bash le = sert aux chaines de caractères. Pour les chiffres, c'est -gt (greater than), -eq (equal) ...
Donc il te faudrait :
si bien sur c'est le chiffre 1 contenu dans le fichier pid.
Regarde man test pour plus d'infos ]]>
Si redshift apparait le quitter de suite si non le lancer ?
Oui
Cela ne crée pas une erreur de faire pgrep redshift && pkill redshift ? Je veux parler de la manière de l'écrire .
Non, dans cette ligne, pkill s'execute seulement si pgrep a retourné une valeur ( car && veut dire "et" ) sinon le shell passe donc directement à l'autre coté du || sans se plaindre.]]>
Plop !
Je pense avoir un léger soucis avec mon script on/off pour redshift ou autre .
Le but de script et de lancer une application et de la ferme dans le cas inverse.
Simplification possible en :
]]>
En gros, si le processus existe, on lance un xterm vert, dans le cas contraire, un xterm rouge.
Le $? récupère la valeur de la dernière commande. (=0 si la commande s'est bien déroulée)
Les crochets entre le x sont indispensables, sinon çà ne marche pas. Equivalent d'un
@+
Zoroastre.]]>
@+
Zoroastre.]]>
Edit : Deuxième version avec le quel dans la théorie tout fonctionne ( avec echo a la place de redshift ) mais pas dans la pratique
]]>