Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll )

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... big_smile ) 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. cool

encore merci. smile

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

lamoule74 a écrit :

incroyable. c'est propre, court et clair. cool

encore merci. smile

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