#1 Le 23/05/2013, à 16:36
- lamoule74
[RESOLU] ne pas afficher sortie d'erreur d'un echo
Bonjour à tous,
Je travaille sur une petite carte embarquée (ce n'est pas du Ubuntu mais du Debian, je poste quand même ici vu mon souci )
J'ai fait un mini programme en shell qui utilise la commande :
echo 43 > /sys/class/gpio/export
En gros je créé le lien entre le kernel ID et la broche de GPIO de ma carte pour un genre de banc de test derrière... Bref, tout ceci n'a pas grande importance.
Une fois le programme terminé si je relance immédiatement le script il m'affiche une erreur :
./controle_GPIO.sh: line 8: echo: write error: Device or resource busy
Ce qui est logique car j'ai déjà créé le lien avec la GPIO, mais je souhaite cacher ce message sur la sortie du terminal une fois le .sh exécuté... Je pensais qu'echo avais une option dans le genre echo -hideoutput (et oui ça résoudrait trop facilement mon problème je sais que je rêve... ) mais bien évidemment cela n'existe pas.
Quelqu'un aurait une idée??
Merci d'avance.
Dernière modification par lamoule74 (Le 24/05/2013, à 08:38)
Ubuntu est un mot Africain qui veut dire:"Je n'ai pas réussi à configurer ma Debian"
Hors ligne
#2 Le 23/05/2013, à 16:52
- pingouinux
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
Bonjour,
Il faut envoyer le message d'erreur à la trappe :
echo 43 > /sys/class/gpio/export 2>/dev/null
Hors ligne
#3 Le 23/05/2013, à 20:17
- Watael
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
salut,
Il est préférable de traiter la source de l'erreur, que de le masquer !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#4 Le 24/05/2013, à 08:37
- lamoule74
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
Pingouinux : merci ça fonctionne !
Watael : je sais d'où vient le problème, après je t'avoue que c'est une manière crado de le contourner... Si tu as idée pour comment traiter le retour du message ou comment savoir que j'ai déjà déclaré la GPIO liée au kernel ID n°x ? Je suis preneur, mais je n'ai aucune idée de comment faire....
Je mets tout de même que le problème est résolu car c'est ce que je cherchais.
Dernière modification par lamoule74 (Le 24/05/2013, à 08:37)
Ubuntu est un mot Africain qui veut dire:"Je n'ai pas réussi à configurer ma Debian"
Hors ligne
#5 Le 24/05/2013, à 08:54
- Watael
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
Le fichier doit ne pas exister, ou être vide, c'est ça ?
alors :
Xport="/sys/class/gpio/export"
test -s "$Xport" && echo 43 >"$Xport"
non ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 24/05/2013, à 13:27
- lamoule74
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
c'est quasiment ça ! merci de ton aide, mon test ressemble à cela pour les curieux :
#!/bin/bash
# programme ecrit par Lamoule
# 24/05/2013
# script de test des GPIOs pour tester la carte *****
# se munir de la carte de test prevue a cet usage
for pins in 43 54 42 41 39 38 81 94 95 80 57 58 59 60
do
# si les fichiers de GPIOs n'existent pas
if [ ! -e "/sys/class/gpio/gpio$pins" ];
then
# exportation des broches
echo $pins > /sys/class/gpio/export
fi
# affectation en entree par securite
echo in > /sys/class/gpio/gpio$pins/direction
done
# si l'utilisateur a rentre un parametre
if [ $# = 1 ]
then
for pinx in 43 54 42 41 39 38 81 94 95 80 57 58 59 60
do
# affectation en sortie
echo out > /sys/class/gpio/gpio$pinx/direction
# bascule a l'etat haut
echo 1 > /sys/class/gpio/gpio$pinx/value
# attendre un nb de secondes a passe en parametres
sleep $1
echo "kernel ID de la broche : $pinx"
# bascule a l'etat bas
echo 0 > /sys/class/gpio/gpio$pinx/value
# affectation en entree par securite
echo in > /sys/class/gpio/gpio$pinx/direction
done
# si l'utilisateur n'a pas rentre de parametre, le temps par defaut est d'1 sec
else
for pinx in 43 54 42 41 39 38 81 94 95 80 57 58 59 60
do
echo out > /sys/class/gpio/gpio$pinx/direction
echo 1 > /sys/class/gpio/gpio$pinx/value
# attendre une seconde d'intervalle
sleep 1
echo "kernel ID de la broche : $pinx"
echo 0 > /sys/class/gpio/gpio$pinx/value
echo in > /sys/class/gpio/gpio$pinx/direction
done
fi
echo "Programme termine avec succes."
Dernière modification par lamoule74 (Le 24/05/2013, à 13:28)
Ubuntu est un mot Africain qui veut dire:"Je n'ai pas réussi à configurer ma Debian"
Hors ligne
#7 Le 24/05/2013, à 14:08
- Watael
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
comme ça ?
#!/bin/bash
rep=/sys/class/gpio/
Pins=( 43 54 42 41 39 38 81 94 95 80 57 58 59 60 )
for pin in "${Pins[@]}"
do
direction="$rep/gpio$pin/direction"
value="$rep/gpio$pin/value"
# si les fichiers de GPIOs n'existent pas, exportation des broches
test -e "$rep/gpio$pin" || echo $pin >$rep/export
# affectation en entree par securite
echo in >$direction
# affectation en sortie
echo out >$direction
# bascule a l'etat haut
echo 1 >$value
# attendre un nb de secondes a passe en parametres, ou 1 sec. par défaut.
sleep ${1:-1}
echo "kernel ID de la broche : $pin"
# bascule a l'etat bas
echo 0 >$value
# affectation en entree par securite
echo in >$direction
done
#echo "Programme termine avec succes."
Dernière modification par Watael (Le 24/05/2013, à 21:11)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#8 Le 24/05/2013, à 14:43
- lamoule74
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
incroyable. c'est propre, court et clair.
encore merci.
petite question : comment ça se fait que t'as pas mis les accolades autour de la variable de repertoire "rep" tout le temps et que ça marche quand même ?
direction="${rep}/gpio$pin/direction"
value="$rep/gpio$pin/value"
Ubuntu est un mot Africain qui veut dire:"Je n'ai pas réussi à configurer ma Debian"
Hors ligne
#9 Le 24/05/2013, à 15:41
- obibann
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
incroyable. c'est propre, court et clair.
encore merci.
petite question : comment ça se fait que t'as pas mis les accolades autour de la variable de repertoire "rep" tout le temps et que ça marche quand même ?
direction="${rep}/gpio$pin/direction" value="$rep/gpio$pin/value"
Les accolades ne sont pas obligatoires. Elles permettent simplement de mieux délimiter une variable.
toto="test"
echo "$toto ${toto}" # affiche : test test
echo "$totototo" # n'affiche rien, bash pense que l'on veut afficher une variable nommée $totototo
echo "${toto}toto" # affiche testtoto
Ubuntu 16.04
Avec Windows, on fait ce qu'on peut... Avec Linux, on fait ce qu'on veut !! :p
Hors ligne
#10 Le 24/05/2013, à 21:18
- Watael
Re : [RESOLU] ne pas afficher sortie d'erreur d'un echo
t'as pas mis les accolades autour de la variable de repertoire "rep" tout le temps
J'avais commencé à écrire sans voir gpio/gpio$pin. +1 obibann
C'est corrigé.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne