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/08/2022, à 17:18

MixT

Protection de variable sous bash

Bonjour,

Je possède une suite de vidéo sur lesquelles j'aimerais appliquer une commande
Le dossier contient 3 vidéos : video1.mp3, video2.mp3 et video3.mp3

Voice le script que je rentre :

for video in  *.mp3; do
	name_v=$(basename $video .mp3)
        parameters="$name_v-parameters.dpf"
	autodock4 -p $parameters -l $name_m-output.dlg
done

J'obtiens la réponse:

autodock4 -p *-parameters.dpf -l *-output.dlg 

La suite de commande attendu est

autodock4 -p video1-parameters.dpf -l video1-output.dlg 
autodock4 -p video2-parameters.dpf -l video2-output.dlg
autodock4 -p video3-parameters.dpf -l video3-output.dlg 

J'ai essayé de protéger ma variable mais je ne vois pas où pourrais se trouver l'erreur, ou comment mieux la protéger.

--
Modération : merci de poster dans la bonne section. Deux fils déplacés qui n'avaient rien à faire dans les « Truc, Astuces,…»

Dernière modification par bruno (Le 02/08/2022, à 06:59)

Hors ligne

#2 Le 01/08/2022, à 17:59

diesel

Re : Protection de variable sous bash

for video in ./*.mp3; do

fonctionnerait certainement mieux (en supposant que tes vidéos sont dans le répertoire courant).

Cela dit, il n'y a pas que ça qui cloche.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 01/08/2022, à 18:01)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#3 Le 01/08/2022, à 18:43

MixT

Re : Protection de variable sous bash

Merci

J'ai essayé

parameters="$($name_v-parameters.dpf)"
parameters='$name_v-parameters.dpf'

Hors ligne

#4 Le 01/08/2022, à 18:47

MicP

Re : Protection de variable sous bash

Bonjour

Je vérifie ce que j'ai dans le répertoire courant :

michel@deb114x1t:~/aeff/MixT$ ls
video1.mp3  video2.mp3  video3.mp3
michel@deb114x1t:~/aeff/MixT$ 

Donc, en utilisant la commande echo
je commence par vérifier ce que ça pourrait donner :

michel@deb114x1t:~/aeff/MixT$ for f in *.mp3; do echo "$f"; done
video1.mp3
video2.mp3
video3.mp3
michel@deb114x1t:~/aeff/MixT$ 
michel@deb114x1t:~/aeff/MixT$ for f in *.mp3; do base="$(basename "$f" .mp3)"; echo "$f" "$base"; done
video1.mp3 video1
video2.mp3 video2
video3.mp3 video3
michel@deb114x1t:~/aeff/MixT$ 
michel@deb114x1t:~/aeff/MixT$ for f in *.mp3; do base="$(basename "$f" .mp3)"; echo autodock4 -p "$base-parameters.dpf" "$base-output.dlg"; done
autodock4 -p video1-parameters.dpf video1-output.dlg
autodock4 -p video2-parameters.dpf video2-output.dlg
autodock4 -p video3-parameters.dpf video3-output.dlg
michel@deb114x1t:~/aeff/MixT$ 

Ok, alors maintenant je peux utiliser la même ligne de commande
mais en supprimant la commande echo
ce qui donnera :

for f in *.mp3; do base="$(basename "$f" .mp3)"; autodock4 -p "$base-parameters.dpf" "$base-output.dlg"; done

Dernière modification par MicP (Le 01/08/2022, à 18:56)

Hors ligne

#5 Le 01/08/2022, à 19:04

MixT

Re : Protection de variable sous bash

Merci beaucoup !! Je sentais qu'à un moment je protégeais mal ma variable

Dernière modification par MixT (Le 01/08/2022, à 19:05)

Hors ligne

#6 Le 01/08/2022, à 20:59

Tawal

Re : Protection de variable sous bash

Hello,

(je viens de l'apprendre aujourd'hui)
Les doubles quotes lors d'une affectation de variable par substitution de commande sont superfules.
Quelque soit le retour de la substitution wink
(test réalisé par shellcheck après avoir été informé de cela par vv222 sur Debian-Facile)

Edit :
Donc

base="$(basename "$video" .mp3)"

et

base=$(basename "$video" .mp3)

sont totalement équivalents et dans le 1er cas les doubles quotes entourant la substitution de commande sont superflues wink

Dernière modification par Tawal (Le 01/08/2022, à 21:05)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#7 Le 01/08/2022, à 21:16

MicP

Re : Protection de variable sous bash

Ok, merci pour l'information, (=> bash est vraiment bien foutu smile )

Par contre, il ne faudra pas oublier de les mettre
autour de la variable utilisée dans la commande pour la suite du script,

sinon, dans le cas où un nom de fichier comporterait un caractère espace (ou autre piège du même genre) :

michel@deb114x1t:~/aeff/MixT$ ls -l
total 0
-rw-r--r-- 1 michel michel 0  1 août  22:07 'video 1.mp3'
-rw-r--r-- 1 michel michel 0  1 août  22:07 'video 2.mp3'
-rw-r--r-- 1 michel michel 0  1 août  22:07 'video 3.mp3'
michel@deb114x1t:~/aeff/MixT$ 
michel@deb114x1t:~/aeff/MixT$ for f in *.mp3; do base=$(basename $f .mp3); echo "$f" "$base"; done
basename: opérande supplémentaire « .mp3 »
Saisissez « basename --help » pour plus d'informations.
video 1.mp3 
basename: opérande supplémentaire « .mp3 »
Saisissez « basename --help » pour plus d'informations.
video 2.mp3 
basename: opérande supplémentaire « .mp3 »
Saisissez « basename --help » pour plus d'informations.
video 3.mp3 
michel@deb114x1t:~/aeff/MixT$ 

Dernière modification par MicP (Le 01/08/2022, à 21:17)

Hors ligne

#8 Le 01/08/2022, à 21:18

Tawal

Re : Protection de variable sous bash

Tout à fait MicP smile
Mais je ne parlais que du cas d'une affectation par substitution de commande wink


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne