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