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 01/07/2007, à 19:19

Strash

Un script bash qui ne marche subitement plus ??

Un script bash de ma fabrication permettant de synchroniser de façon assez particulière mon Archos avec le PC ne fonctionne plus depuis aujourd'hui (il fonctionnais très bien la semaine dernière)

L'erreur renvoyée lorsque je le lance dans un terminal est :

$./autorun.sh
./autorun.sh: 1: Syntax error: Bad substitution

J'ai lu sur internet que cette erreur pouvais être due à la version de bash utilisée... hors ça fonctionnais très bien sur le même PC la semaine dernière ? Et je n'ai pas changé de distribution entre les deux !

(La seule chose que j'ai fait c'est changer de pilotes graphiques (de radeon à fglrx) grâce à Envy, mais ça n'a pas vraiment de rapport...)

voici le script au cas où :

#!/bin/sh

# Script de synchronisation des podcasts sur l'Archos v2.3
# Par Pierre MAURIER
# Commencé le 19/05/07
# Historique des versions
# v1.0 le 20/05/07 : création du script, choix des actions une à une par une question zenity
# v2.0 le 21/05/07 : Choix des actions dans une liste
# v2.1 le 21/05/07 : Correction de bug :
#	- Cache les entrées des miniatures ARCHOS dans la liste historique (pb de miniatures non supprimés qui pouvaient passer pour les fichiers supprimés)
#        Feature :
#	- Affichage d'une info lorsqu'il n'y a rien à faire
# v2.2 le 22/05/07 : Correction de bug :
#	- Pb du au dossier _arcthumb dans la racine des podcasts
# v2.3 le 28/05/07 : Lancement de Nautilus sur le dossier de l'Archos à la demande à la fin du script (pour le démonter ou juste naviguer dedans)

MOUNTPOINT_ARCHOS=/media/A604WIFI
DOS_PODCASTS=~/telechargements/podcasts
DOS_ARCHOS=$MOUNTPOINT_ARCHOS/Video/podcast
#DOS_PODCASTS=~/telechargements/testpod
#DOS_ARCHOS=~/telechargements/testpod2
FICHIER_HISTO=$DOS_PODCASTS/histo

#####################################################
# Détecte un premier lancement et crée le FICHIER_HISTO
if [ ! -e $FICHIER_HISTO ]
then
	echo "Création du fichier historique"
	ls -R $DOS_ARCHOS --hide=*.ATF > $FICHIER_HISTO
else
######################################################
#Crée les répertoires manquants

	# Pour chaque fichier du répertoire
	for dossier in `ls $DOS_PODCASTS`
	do
		# Si c'est un dossier
		if [ -d $DOS_PODCASTS/$dossier ]
		then
			# et s'il n'existe pas déjà
			if [ ! -e $DOS_ARCHOS/$dossier ]
			then
				# Le créer
				echo "création du dossier $dossier"
				mkdir $DOS_ARCHOS/$dossier
			fi
		fi
	done

########################################################
#Marque les fichiers à supprimer de l'Archos mais toujours présents sur le PC
#et marque les copies des nouveaux dans le PC
#puis marque les suppressions des fichiers présents dans l'Archos mais pas sur le PC
#et marque les copies des nouveaux dans l'Archos (improbable...)

	suppression=""
	copie=""
	numaction=0
	# Pour chaque fichier du répertoire du PC
	for dossier in `ls $DOS_PODCASTS`
	do
		# Si c'est un dossier
		if [ -d $DOS_PODCASTS/$dossier ]
		then
			# Pour chaque fichier de ce sous répertoire
			for fichiers in `ls $DOS_PODCASTS/$dossier/`
			do
				# Si le fichier n'est pas présent dans l'Archos
				# que ce n'est pas un répertoire			
				if [ ! -e "$DOS_ARCHOS/$dossier/$fichiers" ] && [ ! -d $DOS_PODCASTS/$dossier/$fichiers ]
				then
					# et qu'il était présent au dernier upload
					if [[ ! `cat $FICHIER_HISTO | grep $fichiers` == "" ]]
					then
						#Le marquer pour la suppression (car il a été regardé sur l'Archos)
						#echo supprimer $DOS_PODCASTS/$dossier/$fichiers
						let "numaction+=1"
						suppression=$suppression"TRUE $numaction supprimer $fichiers $DOS_PODCASTS/$dossier/ "
						actions[numaction]="supprimer $fichiers $DOS_PODCASTS/$dossier/"
					else
						#Le marquer pour le transfert (car il est nouveau)
						#echo copier $DOS_PODCASTS/$dossier/$fichiers dans $DOS_ARCHOS/$dossier/
						let "numaction+=1"
						copie=$copie"TRUE $numaction copie $fichiers $DOS_ARCHOS/$dossier/ "
						actions[numaction]="copier $DOS_PODCASTS/$dossier/$fichiers $DOS_ARCHOS/$dossier/"
					fi
				fi
			done
		fi
	done

	# Pour chaque fichier du répertoire de l'ARCHOS
	for dossier in `ls $DOS_ARCHOS`
	do	
		# Si c'est un dossier mais que ce n'est pas le dossier des miniatures
		if [ -d $DOS_ARCHOS/$dossier ] && [[ ! $dossier == "_arcthumb" ]]
		then
			# Pour chaque fichier de ce sous répertoire
			for fichiers in `ls $DOS_ARCHOS/$dossier/`
			do
				# Si le fichier n'est pas présent dans le PC
				# que ce n'est pas un répertoire
				echo $DOS_ARCHOS/$dossier/$fichiers
				if [ ! -e "$DOS_PODCASTS/$dossier/$fichiers" ] && [ ! -d $DOS_ARCHOS/$dossier/$fichiers ]
				then
					# et qu'il était présent au dernier upload
					if [[ ! `cat $FICHIER_HISTO | grep $fichiers` == "" ]]
					then
						#Le marquer pour la suppression (car il a été regardé sur le PC)
						#echo supprimer $DOS_ARCHOS/$dossier/$fichiers
						let "numaction+=1"
						suppression=$suppression"TRUE $numaction supprimer $fichiers $DOS_ARCHOS/$dossier/ "
						actions[numaction]="supprimer $fichiers $DOS_ARCHOS/$dossier/"
					else
						#Le marquer pour le transfert (car il est nouveau) (peu probable, l'Archos ne télécharge pas de fichiers)
						#echo copier $DOS_ARCHOS/$dossier/$fichiers dans $DOS_PODCASTS/$dossier/
						let "numaction+=1"
						copie=$copie"TRUE $numaction copie $fichiers $DOS_PODCASTS/$dossier/ "
						actions[numaction]="copier $DOS_ARCHOS/$dossier/$fichiers $DOS_PODCASTS/$dossier/"
					fi
				fi
			done
		fi
	done

	# Si il y a au moins une action
	if [[ $numaction > 0 ]]
	then
		#Affichage du choix
		listeok=`zenity --list --title="Mise à jour des podcasts" --text="Sélectionner les actions à effectuer" --width=1000 --height=300 --checklist --column="" --column="ID" --column="Action" --column="Fichier" --column="Dossier" $suppression $copie`

		#Exécution des actions sélectionnés
		listeok=`echo $listeok | tr "|" " "`

		#Compte le nombre d'actions sélectionnés
		nbractions=0
		for action in $listeok
		do
			let "nbractions+=1"
		done
		
		
		(
		progress=0
		i=0
		# Pour chaque action sélectionné
		for action in $listeok
		do
			let "progress += 100/$nbractions"
			let "i += 1"
			# Déterminer son type et effectuer l'action			
			if [[ `echo ${actions[action]} | awk '{print $1}'` == "supprimer" ]]
			then
				echo "# Suppression de "`echo ${actions[action]} | awk '{print $3$2}'`"\naction $i/$nbractions"
				rm `echo ${actions[action]} | awk '{print $3$2}'`
			else 
				echo "# Copie de "`echo ${actions[action]} | awk '{print $2" vers "$3}'`"\naction $i/$nbractions"
				cp `echo ${actions[action]} | awk '{print $2" "$3}'`
			fi
			# Augmenter la barre de progression
			echo $progress
		done
		) |
        		zenity --progress --title="Mise à jour des podcasts" --text="Action" --auto-close --percentage=0
		
		#Mise à jour du fichier historique
		ls -R $DOS_ARCHOS --hide=*.ATF > $FICHIER_HISTO
	else
		zenity --info --text="Aucune mise à jour à faire sur les podcasts de l'Archos" --title="Mise à jour des podcasts"
	fi
fi

#Propose d'ouvrir Nautilus
zenity --question --title="Mise à jour des podcasts" --text="Ouvrir Nautilus ?"
if [[ $? == 0 ]]
then
	nautilus $MOUNTPOINT_ARCHOS &
fi

exit 0

Merci

Hors ligne

#2 Le 01/07/2007, à 19:40

jtlb

Re : Un script bash qui ne marche subitement plus ??

tu as fait des mises à jours? je croix que l'interpréteur de commande a changé: avant cétait bash, maintenant c'est dash.
essaye de mettre

#!/bin/bash

à la place #!/bin/sh


On n'est jamais à l'abri d'un coup de bol!

Hors ligne

#3 Le 02/07/2007, à 02:54

Strash

Re : Un script bash qui ne marche subitement plus ??

Merci, c'était ça l'erreur...

Par contre pourquoi ont-il changé l'interpréteur comme ça ? C'est un peu brutal... ça me semble bizarre, vu que normalement ils ne font pas de changement de version majeure de logiciel pendant la vie d'une version, ça peut pas poser de gros problèmes sur certains scripts ?

Hors ligne

#4 Le 02/07/2007, à 08:56

Link31

Re : Un script bash qui ne marche subitement plus ??

Ça pose des problèmes lorsque le script utilise des bashismes (une syntaxe propre à bash), alors que l'interpréteur indiqué en première ligne est le shell de base (sh). C'est de la responsabilité de l'auteur du script d'indiquer l'interpréteur correct. Si le script ne fonctionne pas à cause de ça, ce n'est pas la faute des mainteneurs de la distribution.

Dernière modification par Link31 (Le 02/07/2007, à 08:57)

Hors ligne