Se connecter

Informatique

Linux

Sujet : Donner la valeur de sortie d'une commande à une variable ?
1
new-uno1
Niveau 16
18 mars 2019 à 22:43:15

Salut,
Je suis sous i3-wm et comme j'ai un PC portable j'ai mis un script qui se lance toutes les 5 minutes pour avoir un avertissement quand la batterie est inférieure à 15% (Tenez pas compte des 4 variables en commentaire pour l'instant)
#!/bin/bash BATTINFO=`acpi -b` #nombre=`grep -o Battery test | wc -l` #field=4 #cutin=1*$nombre #cutdeux=1*$nombre if [[ `echo $BATTINFO | grep Discharging` && `echo $BATTINFO | grep Discharging | cut -f 4 -d " " | cut -c 1-2 | tr -d %` -lt 16 ]] ; then DISPLAY=:0.0 /usr/bin/notify-send -i /home/machin/Images/battery-empty.png "Batterie faible!" "$BATTINFO" fi
En gros, ce script regarde si la batterie est en train de se décharger avec la commande acpi -b et si c'est le cas elle récupère le pourcentage restant, supprime le "%" de la valeur et regarde si elle est inférieur à 16.
Le problème, c'est que quand je branche ma dualshock 4 sur mon PC j'ai un nouvel appareil à 0% de batterie qui apparait quand je fais acpi -b et la sortie de la commande devient alors:
Battery 0: Full, 0%, rate information unavailable Battery 1: Discharging, 31%, 01:20:42 remaining
Ce qui fait que ce script trouve 0 en valeur j'ai donc un avertissement Batterie faible toutes les 5 minutes...
Pour pallier à ce problème, j'ai essayé de créer une variable field, cutin et cutdeux ( en commentaire) qui remplaceront 4, 1 et 2 et qui dépendront du nombre de fois que le mot "Battery" est présent dans la sortie de acpi -b. Mais en créant la variable nombre qui compte le nombre de fois que y'a Battery je me suis rendu compte que faire nombre=`grep -o Battery test | wc -l` ne donne pas la valeur 2 à nombre mais la commande et "`grep -o Battery test | wc -l" me fout une chaîne de caractère. Comment faire du coup ?

[deban]_Dakien
Niveau 10
19 mars 2019 à 01:05:06

J'ai pas de Linux sous les yeux pour regarder mais tu ne peux pas préciser plus exactement le préiphérique à observer ? Par exemple, sur NetBSD, pour regarder le niveau de charge de la batterie, je fais cette commande : /usr/sbin/envstat -d acpibat0|grep %

Du coup, pas d'erreur possible. Une manette ne sera jamais acpibat0. Dans ton cas, une manette PS4 deviendrait un truc genre acpibat1 (encore que j'ai pas essayé) mais la commande s'en ficherait au final. Tu dois bien pouvoir faire ça aussi, non ? :question:

new-uno1
Niveau 16
19 mars 2019 à 19:14:39

Je peux effectivement avoir le pourcentage de la batterie que je veux avec
upower -i /org/freedesktop/UPower/devices/battery_BAT0
Mais le problème avec echo c'est que ça affiche tout sur une ligne donc ça affiche un tas comme ça:
native-path: BAT0 vendor: marque model: Primary serial: un nombre power supply: yes updated: mar. 17 mars 2019 00:00:00 CET (7 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: charging warning-level: none energy: 15 Wh energy-empty: 0 Wh energy-full: 43 Wh energy-full-design: 43 Wh energy-rate: 26 W voltage: 16 V time to full: 1,1 hours percentage: 35% capacity: 100% technology: lithium-ion icon-name: 'battery-good-charging-symbolic' History (charge): 135,000 charging 1 33 charging
Du coup, pour récupérer seulement les chiffres du pourcentage c'est galère, j'ai essayé de faire un cut -c 400-401, mais il semblerait que les chiffres du pourcentage ne soient pas toujours à la même place sûrement à cause du "7 seconds" qui devient un nombre à deux chiffres parfois.

gunrell
Niveau 19
19 mars 2019 à 19:48:32

Methode de bourrin :) :

upower -i /org/freedesktop/UPower/devices/battery_BAT0 | awk -Fpercentage: '{print $2}' | cut -d ' ' -f 2

J'utilise percentage: comme délimiteur ...

Je sais pas si je reponds à ta question de base mais ça enleve le problèmes des 7 secondes !

new-uno1
Niveau 16
19 mars 2019 à 20:57:15

Merci à tous j'ai réussi en utilisant un truc comme la commande que t'as donnée, par contre quand je mettais le | cut -d ' ' -f 2 ça me mettait en sortie plusieurs lignes vides et en l'enlevant ça a mis plusieurs lignes vides sauf une avec le pourcentage précédé de plusieurs espaces, mais dans les variables visiblement les espaces sont pas pris en compte donc en faisant :
A=`upower -i /org/freedesktop/UPower/devices/battery_BAT0 | awk -Fpercentage: '{print $2}' | tr -d %`
Puis echo $A, j'ai bien le pourcentage sans espace.
D'ailleurs d'où sort le /org/freedesktop ? Je n'ai aucun dossier org à ma racine :doute:

1
Sujet : Donner la valeur de sortie d'une commande à une variable ?
   Retour haut de page
Consulter la version web de cette page