#1 Le 10/09/2009, à 15:10
- Varamil
[Résolu] Modifier autostart.sh sous openbox
Bonjour à tous,
J'ai openbox installé sur mon ordinateur portable. Depuis le grub je démarre mon noyau soit sur le runlevel 2 soit sur le 4.
J'ai donc voulu adapter mon autostart.sh en fonction du runlevel.
Cependant j'ai un problème avec les tests conditionnels et je ne comprends pas d'où cela vient.
Je voudrais écrire ceci :
level=$( runlevel | grep -oE '[0-9]*' )
if [[ $level != 4 ]]
then
#Le runlevel est 2, on exécute les instructions désirées
...
echo "Mode : 2, level détecté : $level" >> level
else
#Le runlevel est 4
...
echo "Mode : 4, level detecté : $level" >> level
fi
Or, dans tout les cas $level != 4 est considérer comme faux, et donc on passe aux instructions du else. De plus le runlevel est bien détecté, car mon fichier 'level' contient la bonne valeur au niveau de la variable $level.
J'ai également essayé d'inverser le sens du test, ce qui conduit au même effet, dans tout les cas c'est l'instruction après le else qui est exécutée :
level=$( runlevel | grep -oE '[0-9]*' )
if [[ $level == 4 ]]
then
#Le runlevel est 4, on exécute les instructions désirées
...
echo "Mode : 4, level detecté : $level" >> level
else
#Le runlevel est 2
...
echo "Mode : 2, level détecté : $level" >> level
fi
Je ne comprends pas du tout pourquoi un tel comportement. Est ce que ce script autostart.sh est exécuté d'une manière particulière, et on ne peut pas utiliser tout les fonctions du bash ?
Merci
Dernière modification par Varamil (Le 12/09/2009, à 16:48)
Hors ligne
#2 Le 10/09/2009, à 18:07
- Elzen
Re : [Résolu] Modifier autostart.sh sous openbox
Hem, je dis peut-être une bêtise, mais il est peut-être possible que le shell appelé ne soit pas bash, mais un autre qui ne lit pas les opérations booléennes de la même manière ?
En général, quand je fais des conditionnelles en shell, je passe plutôt par l'utilitaire test, qui est assez pratique et surtout bien lisible. D'ailleurs, je ne suis pas expert pour les opérations entre [[]], mais avec test, le signe = (ou ==) ne sert que pour les comparaisons de chaînes de caractères. S'il s'agit de comparer deux valeurs numériques, test $level -eq 4 (ou -ne 4) devrait marcher bien
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#3 Le 10/09/2009, à 20:48
- Varamil
Re : [Résolu] Modifier autostart.sh sous openbox
Ben justement je me pose aussi la question, quel est le shell appelé, comme il n'y a rien de spécifié en début de script, je suppose que c'est celui par défaut, qui normalement pour moi est sh, je crois.
Sinon pour les doubles crochets et le égal, normalement il n'y a pas de problème, en shell les variables ne sont pas typés, donc tu peux l'utiliser pour des chaînes ou des nombres. Cependant j'ai quand même essayé un -ne à tout hasard, mais exactement le même résultat.
if [ "$level" -ne "4" ]; then ...
Après en ce qui concerne l'utilisation de test j'ai pas trop l'habitude, mais ça me parait un peu compliqué d'enchaîner plein d'instructions en fonction d'un résultat ou d'un autre, comparé à un if
Edit:
J'ai essayé quelque chose comme ça :
test $level -eq 4 && (
#instructions
...
) || (
#instructions dans le cas contraire
...
)
et ça semble marcher, mais ya rien de plus propre que ça ?
Dernière modification par Varamil (Le 10/09/2009, à 21:06)
Hors ligne
#4 Le 10/09/2009, à 20:59
- Sciensous
Re : [Résolu] Modifier autostart.sh sous openbox
je pense que tu as tout faux dans les 2 cas:
le test
if [[ $level == 4 ]]
ne marche pas car il compare des caractères et non des valeurs donc tu demande si "4" est égal à la valeur ascii de 4 (soit environ 52 )
et
if [ "$level" -ne "4" ]; then ...
ne va pas var -ne vaut pour des valeurs numériques, donc ce qui doit marcher:
if [[ "$level" == "4" ]]
ou
if test $level -eq 4 ; then ...
(voir ArkSeth)
Dernière modification par Sciensous (Le 10/09/2009, à 21:00)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#5 Le 10/09/2009, à 22:02
- Varamil
Re : [Résolu] Modifier autostart.sh sous openbox
ben si je tape ça dans un terminal :
> level="4"
> if [[ $level == 4 ]]; then echo marche; fi
j'ai bien marche qui s'affiche, et pourtant $level contient une chaine et 4 n'en est pas une.
Après pour -ne (ou -eq) c'est pareil, je peux mettre des guillemets n'importe où, j'ai le bon résultat.
Peut être qu'en principe ça ne doit pas marcher, mais il semble que dans la plupart des cas ça marche. Peut être qu'au démarrage quand autostart est lancé le shell utilisé est beaucoup plus restrictif que bash ou sh.
Je vais tester tes deux dernière proposition
Hors ligne
#6 Le 10/09/2009, à 22:12
- Varamil
Re : [Résolu] Modifier autostart.sh sous openbox
Bon alors il faut absolument utiliser la fonction test.
Si j'utilise :
if [[ "$level" == "4" ]]
ça ne marche pas, mais :
if test $level -eq 4 ; then ...
marche. Je vais donc retenir cette solution qui est un peu plus propre que la dernière que j'ai proposée.
Bon, je pense avoir trouvé une solution pour gérer mon démarrage, mais ça serait intéressant de savoir quel shell est utilisé, car il semble ne pas apprécier la structure en [[ ]]
Hors ligne
#7 Le 11/09/2009, à 09:15
- Sciensous
Re : [Résolu] Modifier autostart.sh sous openbox
résolu ?
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#8 Le 12/09/2009, à 09:47
- Elzen
Re : [Résolu] Modifier autostart.sh sous openbox
Pour identifier le shell en cours, tu peux essayer un "echo $0 > current_shell" ou quelque chose du genre
Elzen : polisson, polémiste, polymathe ! (ex-ArkSeth)
Un script pour améliorer quelques trucs du forum.
La joie de t'avoir connu surpasse la peine de t'avoir perdu…
timezone[blocklist]
Hors ligne
#9 Le 12/09/2009, à 16:47
- Varamil
Re : [Résolu] Modifier autostart.sh sous openbox
Pas bête ArkSeth
Et donc le résultat est :
/usr/bin/openbox-session
qui est en fait un script dont le contenu est :
#!/bin/sh
if test -n "$1"; then
echo "Syntax: openbox-session"
echo
echo "See the openbox-session(1) manpage for help."
exit
fi
AUTOSTART="$HOME/.config/openbox/autostart.sh"
GLOBALAUTOSTART="/etc/xdg/openbox/autostart.sh"
if test -e $AUTOSTART; then
. $AUTOSTART
else
if test -e $GLOBALAUTOSTART; then
. $GLOBALAUTOSTART
fi
fi
exec /usr/bin/openbox "$@"
Donc a priori c'est sh qui est utilisé. Mais cela reste tout de même bizarre, qu'après en utilisant sh on ait plus de libertés au niveau de la syntaxe.
Bon je met résolu, mais si quelqu'un a une explication je suis preneur.
Hors ligne