Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Exec format error

8 réponses
Avatar
Ph. Ivaldi
Bonjour,

Le script suivant
http://www.thinkwiki.org/index.php?title=Code/tp-fancontrol.init.debian&action=edit

provoque chez moi l'erreur "Exec format error"
Le problème semble venir de do_start() mais je ne sais pas le corriger.
Le programme "tp-fancontrol" fonctionne bien depuis une console.

Une idée ?

$ ll /bin/sh
lrwxrwxrwx 1 root root 4 Jul 20 13:05 /bin/sh -> bash

$ bash --version
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)

Merci de votre aide,
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/

8 réponses

Avatar
Ph. Ivaldi
Le 25 juillet 2008, Ph. Ivaldi écrivit :

Le script suivant
http://www.thinkwiki.org/index.php?title=Code/tp-fancontrol.init.debian&actioníit
provoque chez moi l'erreur "Exec format error"
Le problème semble venir de do_start() mais je ne sais pas le corriger.
Le programme "tp-fancontrol" fonctionne bien depuis une console.



tp-fancontrol fonctionne depuis une console mais pas s'il est lancé
en tant que service; dans ce cas j'obtiens l'erreur:
8<------8<------8<------8<------8<------8<------8<------8<------8<------
/usr/bin/tp-fancontrol line 202: Syntax error near unexpected token '<'
/usr/bin/tp-fancontrol line 202: `read X Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Z1 Z2 Z3 JNK < <(echo "$THERMAL")'
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'en profite pour demander pourquoi, à la ligne 201, il n'y a qu'un '<':
read THERMAL < $IBM_ACPI/thermal
alors qu'à la ligne 202 il en faut 2.

Merci de votre aide,
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Avatar
Alain Ketterlin
Ph. Ivaldi writes:

8<------8<------8<------8<------8<------8<------8<------8<------8<------
/usr/bin/tp-fancontrol line 202: Syntax error near unexpected token '<'
/usr/bin/tp-fancontrol line 202: `read X Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Z1 Z2 Z3 JNK < <(echo "$THERMAL")'
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'en profite pour demander pourquoi, à la ligne 201, il n'y a qu'un '<':
read THERMAL < $IBM_ACPI/thermal
alors qu'à la ligne 202 il en faut 2.



C'est un bash-ism : <(commande) est remplacé par le nom d'une fifo, et
"commande" est exécutée avec une sortie standard reliée à l'autre bout
de la fifo (peut-être que d'autres shells font pareil, je l'ignore).
L'autre < redirige simplement l'entrée standard de read sur la fifo.

Ca m'étonnerait que ça fonctionne dans un script init, qui utilise en
général /bin/sh, lequel ne connaît pas je pense <(...). J'ai
l'impression que

echo "$THERMAL" | read X Y1 ...

ferait exactement la même chose sans utiliser de fifo.

Un expert peut-il confirmer/infirmer ?

-- Alain.
Avatar
Stephane CHAZELAS
2008-07-29, 16:21(+02), Alain Ketterlin:
Ph. Ivaldi writes:

8<------8<------8<------8<------8<------8<------8<------8<------8<------
/usr/bin/tp-fancontrol line 202: Syntax error near unexpected token '<'
/usr/bin/tp-fancontrol line 202: `read X Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Z1 Z2 Z3 JNK < <(echo "$THERMAL")'
8<------8<------8<------8<------8<------8<------8<------8<------8<------

J'en profite pour demander pourquoi, à la ligne 201, il n'y a qu'un '<':
read THERMAL < $IBM_ACPI/thermal
alors qu'à la ligne 202 il en faut 2.



C'est un bash-ism : <(commande) est remplacé par le nom d'une fifo, et
"commande" est exécutée avec une sortie standard reliée à l'autre bout
de la fifo (peut-être que d'autres shells font pareil, je l'ignore).
L'autre < redirige simplement l'entrée standard de read sur la fifo.


[...]

C'est un kshism que bash et zsh ont copié.

A la place, on peut faire:

set -f
set -- $THERMAL

X=$1 Y1=$2...

Ou

printf '%sn' "$THERMAL" | {
read X Y1...
do-something with "$X", "$Y1"...
}

ou utiliser awk.

--
Stéphane
Avatar
Ph. Ivaldi
Le 29 juillet 2008, Stephane CHAZELAS écrivit :

set -f



on peut lire ici http://www.ss64.com/bash/set.html

8<------8<------8<------8<------8<------8<------8<------8<------8<------
-f noglob
Disable file name generation (globbing).
8<------8<------8<------8<------8<------8<------8<------8<------8<------

Je vais là http://www.linux-france.org/prj/jargonf/G/globalisation.html
et je ne comprends toujours pas ce que fait set -f.
Pouvez vous m'expliquer svp ?

set -- $THERMAL

X=$1 Y1=$2...



$ read THERMAL < /proc/acpi/ibm/thermal ;
echo $THERMAL; set -- $THERMAL ;
echo "$1--$2--$3--$4"

donne:
temperatures: 52 47 39 54 35 -128 30 -128 45 49 49 -128 -128 -128 -128 -128
temperatures:--52--47--39

J'ai appris un truc génial !

Ou

printf '%sn' "$THERMAL" | {
read X Y1...
do-something with "$X", "$Y1"...
}



Parfait.
Merci à tous les deux.
Avatar
Stephane CHAZELAS
2008-07-29, 21:13(+02), Ph Ivaldi:
Le 29 juillet 2008, Stephane CHAZELAS écrivit :

set -f



on peut lire ici http://www.ss64.com/bash/set.html

8<------8<------8<------8<------8<------8<------8<------8<------8<------
-f noglob
Disable file name generation (globbing).
8<------8<------8<------8<------8<------8<------8<------8<------8<------


[...]
set -- $THERMAL

X=$1 Y1=$2...




[...]

Quand on laisse une variable sans ses quotes (dans des contexte
de /liste/), deux choses se passent:
1- word splitting
2- filename generation

1 est ce que tu veux: que le contenu de $THERMAL soit splitté en
en une liste d'arguments passée a "set".

Le 2 est ce que tu ne veux pas, c'est a dire que les "mots"
resultant du splitting soit l'objet de filename generation.

Par example si
THERMAL='a * b'
set -- $THERMAL

tu veux $1==a, $2==*, $3==b. Sans set -f, le * est transformé en
la liste des fichiers du repertoire courant qui matchent *
(c'est a dire tous les fichiers sauf ceux qui commencent par
".").

--
Stéphane
Avatar
Ph. Ivaldi
$ ( set -f; ls *.*)
ls: cannot access *.*: No such file or directory

Merci !
Avatar
Xavier Gachon
Le 29-07-2008, Ph Ivaldi a écrit :
J'ai appris un truc génial !

Ou

printf '%sn' "$THERMAL" | {
read X Y1...
do-something with "$X", "$Y1"...
}



Parfait.



une alternative posix equivalente qui offre de positionner
les variables dans l'environnement courant et de ne pas avoir a
sauver d'eventuel positionnal parameters (bien pratique lorsqu'ils
sont deja utilisés pour une raison quelconque), un here doc:

read X Y1 ... << end
$THERMAL
end

ou le contenu ($THERMAL ici) est sujet aux command substitution,
parameters et arithmetic mais pas pathname expansions.

hope this help.
Avatar
Ph. Ivaldi
Le 30 juillet 2008, Xavier Gachon écrivit :

read X Y1 ... << end
$THERMAL
end



Effectivement, c'est simple et efficace.
Merci,
--
Philippe