Page 1 sur 1

[initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : dim. 20 nov. 2011, 12:29
par Vinvin
Bonjour. :D

Depuis la mise-à-jour du paquet initscripts vers la version 2011.11.3-1 (sous Archlinux 32 bits), je rencontre fréquemment cette erreur lorsque des scripts sont lancés :
$ /etc/rc.d/un_script start

/etc/rc.d/functions: line 497: syntax error near unexpected token `<'
/etc/rc.d/functions: line 497: ` done < <(findmnt -runRo TARGET,FSTYPE,OPTIONS / | tac)'
$ /etc/rc.d/un_autre_script stop

/etc/rc.d/functions: line 497: syntax error near unexpected token `<'
/etc/rc.d/functions: line 497: ` done < <(findmnt -runRo TARGET,FSTYPE,OPTIONS / | tac)'
Cette erreur n'apparaît qu'avec certains scripts, pas avec tous. :!:

Voici une partie du fichier incriminé, avec la ligne en question :

Code : Tout sélectionner

$ cat /etc/rc.d/functions

Code : Tout sélectionner

[…]
umount_all() {
	# $1: restrict to fstype

	local mounts

	while read -r target fstype options; do

		# match only targetted fstypes
		if [[ $1 && $1 != "$fstype" ]]; then
			continue
		fi

		# don't unmount API filesystems
		if [[ $target = /@(proc|sys|run|dev|dev/pts) ]]; then
			continue
		fi

		# avoid networked devices
		IFS=, read -ra opts <<< "$options"
		if in_array _netdev "${opts[@]}"; then
			continue
		fi

		mounts+=("$target")
	done < <(findmnt -runRo TARGET,FSTYPE,OPTIONS / | tac)

	umount -r "${mounts[@]}"

}
[…]
Avez-vous la même erreur chez vous ? Que dois-je faire pour la corriger ?

Merci. :chinois:

Re: [initscripts] /etc/rc.d/functions: syntax error

Publié : dim. 20 nov. 2011, 12:45
par drs
change

Code : Tout sélectionner

#!/bin/sh
par

Code : Tout sélectionner

#!/bin/bash

Re: [initscripts] /etc/rc.d/functions: syntax error

Publié : dim. 20 nov. 2011, 13:07
par Vinvin
Merci Drs pour cette réponse rapide, c'était ça. :applaudit:

Les scripts qui posaient problème commençaient par

Code : Tout sélectionner

#!/bin/sh
Le problème est résolu en remplaçant par

Code : Tout sélectionner

#!/bin/bash
:merci:

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 18:13
par Anthony25
Salut,
Chez moi c'est déjà marqué #!/bin/bash et j'ai quand même une erreur.

Tu es sûr que ce n'est pas plutôt une coquille à la ligne 497 ?

Car si je remplace

Code : Tout sélectionner

done < <(findmnt -runRo TARGET,FSTYPE,OPTIONS / | tac)
Par

Code : Tout sélectionner

done < $(findmnt -runRo TARGET,FSTYPE,OPTIONS / | tac)
Je n'ai plus d'erreur.

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 18:29
par Vinvin
Anthony25 a écrit :Tu es sûr que ce n'est pas plutôt une coquille à la ligne 497 ?
Je n'en sais rien.
Chez moi, plus d'erreur depuis que mes scripts n'ont plus de

Code : Tout sélectionner

#!/bin/sh
Je ne suis pas développeur, j'ignore si il y a une erreur dans la ligne 497. Si il y en a vraiment une, vous devriez être nombreux à en souffrir : il y aurait de nombreuses infos sur Internet.

Chez toi, cette erreur survient avec tous les scripts, ou avec certains seulement ? Quels sont les scripts en question ?

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 18:34
par Anthony25
Bumblebee, utilisé pour les cartes Optimus (système de cartes graphiques hybrides) et c'est tout.

Si je remplace la ligne 497 du fichier /etc/rc.d/functions par celle que j'ai mis plus haut, je n'ai plus d'erreur. Je voulais demander confirmation pour vérifier que ça soit correct.

Edit : et surtout si je n'applique pas ma correction, j'ai droit à un gros plantage lors de reveil de mon laptop après une mise en veille (en gros bumblebee, qui est censé réveiller uniquement ma carte intel, plante). Là tout marche impec.

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 18:59
par benjarobin
Tout ce que je peux dire c'est que c'est ce commit qui a produit le problème : http://projects.archlinux.org/initscrip ... 902876dfa3
Cela m'étonnerait que "< <(cmd)" soit une syntaxe valide, "< $(cmd)" me semble mieux, mais je suis plutôt "débutant" en bash.

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 19:10
par Anthony25
Moi aussi, et je pense comme toi ^^

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 19:19
par benjarobin
Bug rapporté: https://bugs.archlinux.org/task/27213
Au pire je me fais jeter :-)

Edit: Je me suis bien fais jeté, j'aurais du vérifier avant :oops:
Ce n'est pas un bug !!! Voir manuel de bash, attention sh ne devrait plus être utilisé

@Anthony25 Recherche /bin/sh dans tous les script de ton ordinateur lié à bumblebee important /etc/rc.d/functions

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 19:53
par FoolEcho
Tu n'es pas le premier à te faire avoir déjà. :D
Ceci dit, je ne connaissais pas non plus (je me suis d'ailleurs interrogé en voyant le sujet :mrgreen: ). C'est propre au shell bash, pour les curieux: http://docstore.mik.ua/orelly/unix/upt/ch09_18.htm.

Re: [initscripts] /etc/rc.d/functions: syntax error (résolu)

Publié : lun. 21 nov. 2011, 20:10
par Anthony25
Merci benjarobin, tu avais raison : le script /etc/rc.d/bumblebee contient #!/bin/sh et il appelle /etc/rc.d/functions qui lui utilise une syntaxe propre au bash comme l'a dit FoolEcho => problème

J'ai modifié le script bumblebee en mettant #!/bin/bash et tout est rentré dans l'ordre. Je l'ai aussi signalé aux dev.

Merci à vous deux ;)