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 14/05/2020, à 15:08

TZB

Commande introuvable dans un script bash

Bonjour,

Je fais face à un problème assez gênant dans un script Bash que je suis en train de créer : Il semblerait qu'une des commandes disponibles (sed, pour ne pas la nommer) ne fonctionne pas à chaque fois...

Pour faire plus simple, voici mon code :

if [ "$#" -lt 1 ]; then
	echo "USAGE: ./script_comparaison config_file.xml [config_file_1of2.xml]"
else
	DATA=$(ls /home/benoit/Documents/IHUBordeaux/data/*FID*.h5)
	#echo $DATA
	for  INPUT_KSPACE_DATA in $DATA
	do
		echo $INPUT_KSPACE_DATA
		NAME=$(echo $INPUT_KSPACE_DATA | sed "s/FID/OUTPUT/g")
		NAME=$(echo $NAME | cut -d '/' -f 7-8)
		echo $NAME
		echo $PATH
		NAME_NEW=$(echo $NAME | sed "s/.h5/_standard.h5/g")
		echo $NAME_NEW
		NEW_NAME_1OF2=$(echo $NAME | sed "s/.h5/_1of2.h5/g")
		echo $NEW_NAME_1OF2
		FOLDER=$(echo $INPUT_KSPACE_DATA | cut  -d '/' -f 1-6)
		echo $FOLDER
		#echo $PATH
		#NAME=$(echo $INPUT_KSPACE_DATA | sed "s/FID/OUTPUT/g")
		echo "----------------------------------------------------------------------"
	done
fi

Et voici l'output pour un des fichiers concernés :

/home/benoit/Documents/IHUBordeaux/data/meas_MID00344_FID49410_cmrr_12s_100p_MB3_GP2_PF.h5
meas_MID00344_OUTPUT49410_cmrr_12s_100p_MB3_GP2_PF.h5
/home/benoit/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/cuda-10.0/bin
./comparison_script: ligne 15:  sed : commande introuvable

meas_MID00344_OUTPUT49410_cmrr_12s_100p_MB3_GP2_PF_1of2.h5
/home/benoit/Documents/IHUBordeaux/data
----------------------------------------------------------------------

On peut voir que le premier appel à sed (ligne 11) fonctionne, ainsi que le troisième (ligne 17), mais pas le deuxième (ligne 15), alors que la syntaxe est la même.

J'ai également essayé en mettant /bin/sed, sans succès.

J'utilise Bash, sous Ubuntu 18.04.

Quelqu'un aurait une solution à ce problème ? J'ai essayé plusieurs choses, toujours sans succès (inutile de dire qu'il semble bien que mon PATH ne soit pas modifié entre les appels à sed)

Hors ligne

#2 Le 14/05/2020, à 15:39

Watael

Re : Commande introuvable dans un script bash

salut,

d'abord, non : pas ls

for inkSpaceData in /home/benoit/Documents/IHUBordeaux/data/*FID*.h5; do :...; done

ensuite, les noms de variables utilisateurs doivent être en minuscules, ou minuscules et Majuscules, mais pas tout en majuscules.
c'est, par convention, réservé aux variables d'environnement (HOME, PWD...).

enfin, sed est inutile. En bash, utilise plutôt la Substitution des paramètres.

PS: et mets toujours les Développements de paramètres entre guillemets. TOUJOURS. à moins de savoir pourquoi.

Dernière modification par Watael (Le 14/05/2020, à 17:32)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 14/05/2020, à 16:21

Sciensous

Re : Commande introuvable dans un script bash

et attention benoit, sed mérite une petite lecture de tuto car le point '.' dans la recherche de motif a un signification particulière cool


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#4 Le 14/05/2020, à 18:34

marcus68

Re : Commande introuvable dans un script bash

En complément des excellents conseils de Watael et Sciensous,

je rajouterais que la commande ne marche pas dans ce cas de figure car il y a sûrement un espace qui n'est pas l'espace standard juste avant le sed de ta ligne 15.

Si tu fais attention dans l'erreur, la commande recherchée s'appelle " sed" et non "sed"

Hors ligne

#5 Le 14/05/2020, à 19:57

MicP

Re : Commande introuvable dans un script bash

Bonjour

Pour se passer des commandes sed et cut
en utilisant les Substitution de paramètres de bash :

michel@debT450:~$ mavar="/home/benoit/Documents/IHUBordeaux/data/azerty---FID---uiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar/FID/OUTPUT}"
/home/benoit/Documents/IHUBordeaux/data/azerty---OUTPUT---uiopFIDqsdf.h5
michel@debT450:~$ mavar="/home/benoit/Documents/IHUBordeaux/data/azerty---FID---uiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar//FID/OUTPUT}"
/home/benoit/Documents/IHUBordeaux/data/azerty---OUTPUT---uiopOUTPUTqsdf.h5


michel@debT450:~$ mavar="/home/benoit/Documents/---.h5---IHUBordeaux/data/azertyFIDuiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar/.h5/_standard.h5}"
/home/benoit/Documents/---_standard.h5---IHUBordeaux/data/azertyFIDuiopFIDqsdf.h5
michel@debT450:~$ mavar="/home/benoit/Documents/---.h5---IHUBordeaux/data/azertyFIDuiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar//.h5/_standard.h5}"
/home/benoit/Documents/---_standard.h5---IHUBordeaux/data/azertyFIDuiopFIDqsdf_standard.h5


michel@debT450:~$ mavar="/home/benoit/Documents/IHUBordeaux/data/azertyFIDuiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar##*/}"
azertyFIDuiopFIDqsdf.h5
michel@debT450:~$ mavar="/home/benoit/Documents/IHUBordeaux/data/azertyFIDuiopFIDqsdf.h5"
michel@debT450:~$ echo "${mavar%/*}"
/home/benoit/Documents/IHUBordeaux/data

Dernière modification par MicP (Le 14/05/2020, à 20:08)

Hors ligne

#6 Le 15/05/2020, à 07:01

TZB

Re : Commande introuvable dans un script bash

Merci à tous pour vos réponses.

J'ai pu trouver le problème (un caractère non standard, justement) et résoudre le souci. J'essayerai d'optimiser le script quand j'aurai un peu de temps, selon vos recommandations

Hors ligne

#7 Le 15/05/2020, à 07:46

MicP

Re : Commande introuvable dans un script bash

Il faut toujours se méfier des "éditeurs de texte très jolis"
qui font de ton script ce qu'ils veulent.

Dans le doute, tu peux vérifier si ce que tu vois écrit corresponds vraiment à ce que tu voulais
en utilisant la commande hexdump <=> hd pour vérifier certains caractères,
par exemple les "espaces insécables" à la place d'espaces simple
et tout plein d'autres "joyeusetés" du même genre.

Il y a aussi les copiés/collés depuis certaines pages web
dont les scripts de mise en page reformatent certains caractères sans te le dire
juste pour que ça paraisse plus "présentable".
et les caractères de tabulations qui remplacent des suites d'espaces
sans que ça se voie…

Dernière modification par MicP (Le 15/05/2020, à 11:23)

Hors ligne

#8 Le 15/05/2020, à 12:20

TZB

Re : Commande introuvable dans un script bash

l' "éditeur de texte très joli" en question s'appelle gedit et est installé de base avec Ubuntu 18.04 (d'après ce que j'ai pu voir), mais c'est noté, la prochaine fois, je passerai par nano en espérant qu'il y aie moins de problèmes wink
Le texte de base était copié/collé depuis un chat Skype, le problème a pu venir de là.
Enfin bref, problème résolu, encore n grand merci à tous.

Hors ligne

#9 Le 15/05/2020, à 12:40

MicP

Re : Commande introuvable dans un script bash

Généralement, il n'y a aucun problème à utiliser Gedit pour éditer des fichiers scripts pour Linux
si ce n'est le risque d'y copier/coller des caractères bizarres depuis une page web ou provenant d'un autre fichier "pollué"
ou simplement d'ouvrir pour le modifier, un fichier qui a déjà été "pollué"
Mais bon, ces risques là, on les retrouve aussi avec tous les autres éditeurs.

Dernière modification par MicP (Le 17/05/2020, à 03:10)

Hors ligne