bash : combiner %% et / dans une expansion

Le
Dominique MICOLLET
Bonjour,

Ayant eu à convertir un ensemble de fichiers en modifiant leur extension et
en remplaçant les blancs de leur nom par un point, j'ai utilisé :

for nom in *.JPG ; do CIBLE=${nom%%.JPG}; convert "$nom" -geometry 600x600 -
rotate 270 ${CIBLE// /.}.eps; done

(convert réalise la conversion JPG->eps avec mise à l'échelle et rotation)

A B C.JPG devient A.B.C.eps

Existe-t'il un moyen d'écrire l'expansion sans user de CIBLE ?

Cordialement

Dominique
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Lucas Levrel
Le #26372217
Le 15 octobre 2015, Dominique MICOLLET a écrit :

for nom in *.JPG ; do CIBLE=${nom%%.JPG}; convert "$nom" -geometry 600x600 -
rotate 270 ${CIBLE// /.}.eps; done

A B C.JPG devient A.B.C.eps

Existe-t'il un moyen d'écrire l'expansion sans user de CIBLE ?



$(echo $nom | sed 's/.JPG$//;s/ /./g')

;-)

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Nicolas George
Le #26372216
Lucas Levrel , dans le message
$(echo $nom | sed 's/.JPG$//;s/ /./g')



Ne jamais utiliser echo avec des données provenant de l'extérieur. C'est à
réserver à du texte élémentaire directement présent dans le script.
Francois Lafont
Le #26372224
Bonjour,

On 15/10/2015 12:14, Nicolas George wrote:

Ne jamais utiliser echo avec des données provenant de l'extérieur. C'est à
réserver à du texte élémentaire directement présent dans le script.



Et par exemple avec ça (je mets des doubles quotes au niveau du echo) :

----------------------------
#!/bin/sh

arg1="$1"
echo "$arg1" | un_prog
----------------------------

Il y a un risque ? Attention (entendons-nous bien ;)), ma question précise
est : est-il possible avec le script ci-dessus que le programme "un_prog"
reçoive en entrée un flux qui soit différent de l'argument 1 passé au
script (une fois celui-ci développé par le shell etc. bien sûr) ? Si oui,
est-ce possible d'avoir un exemple ?

Sinon, c'est vrai que echo est une commande très fourbe, mais que faut-il
utiliser à la place ? printf ? Le souci avec printf, c'est que si par
exemple la variable contient un "%", ça va changer son comportement et ça
va mettre la pagaille, non ?

Je suis très intéressé par des réponses à ces questions étant donné
qu'il m'arrive assez souvent de faire des scripts en shell.

--
François Lafont
Nicolas George
Le #26372270
Francois Lafont , dans le message
Il y a un risque ? Attention (entendons-nous bien ;)), ma question précise
est : est-il possible avec le script ci-dessus que le programme "un_prog"
reçoive en entrée un flux qui soit différent de l'argument 1 passé au
script (une fois celui-ci développé par le shell etc. bien sûr) ? Si oui,
est-ce possible d'avoir un exemple ?



Essaie avec arg1 qui contient des backslashes ou commence par un tiret. Le
résultat va dépendre de la version du shell et d'echo.

Sinon, c'est vrai que echo est une commande très fourbe, mais que faut-il
utiliser à la place ? printf ?



Oui.

Le souci avec printf, c'est que si par
exemple la variable contient un "%", ça va changer son comportement et ça
va mettre la pagaille, non ?



Non, le premier argument de printf doit (presque) toujours être constant.
Francois Lafont
Le #26372383
On 15/10/2015 17:31, Nicolas George wrote:
Francois Lafont , dans le message
Il y a un risque ? Attention (entendons-nous bien ;)), ma question précise
est : est-il possible avec le script ci-dessus que le programme "un_prog"
reçoive en entrée un flux qui soit différent de l'argument 1 passé au
script (une fois celui-ci développé par le shell etc. bien sûr) ? Si oui,
est-ce possible d'avoir un exemple ?



Essaie avec arg1 qui contient des backslashes ou commence par un tiret. Le
résultat va dépendre de la version du shell et d'echo.



Ah ah, bien vu. ;)
En effet, en prenant ce script :

-------------------------
#!/bin/sh

arg1="$1"
echo "$arg1" | cat
-------------------------

~$ /tmp/test.sh '-n' # là rien ne s'affiche.

~$ /tmp/test.sh 'aaaatbbbb' # là le t devient une tabulation.
aaaa bbbb

Sinon, c'est vrai que echo est une commande très fourbe, mais que faut-il
utiliser à la place ? printf ?



Oui.

Le souci avec printf, c'est que si par
exemple la variable contient un "%", ça va changer son comportement et ça
va mettre la pagaille, non ?



Non, le premier argument de printf doit (presque) toujours être constant.



Ah ok, donc si je te suis bien, pour faire propre, il faut que
je fasse ça :

-------------------------
#!/bin/sh

arg1="$1"
printf '%sn' "$arg1" | cat
-------------------------

Est-ce bien cela que tu voulais dire ?
En tout cas merci bien, ça me servira ce « truc ».

--
François Lafont
Nicolas George
Le #26372396
Francois Lafont , dans le message
printf '%sn' "$arg1" | cat
Est-ce bien cela que tu voulais dire ?



Exactement.

Note que pour les cas simples :

cat <<EOF
$arg1
EOF

doit faire l'affaire aussi.
Francois Lafont
Le #26372400
On 16/10/2015 00:18, Nicolas George wrote:

Est-ce bien cela que tu voulais dire ?



Exactement.

Note que pour les cas simples :

cat <<EOF
$arg1
EOF

doit faire l'affaire aussi.



Ok, merci bien... ;)

... et désolé Dominique pour cette petite digression sur votre fil
de discussion, pour lequel je n'ai d'ailleurs pas la moindre idée de
solution (en général j'essaye autant que possible de ne pas utiliser
des commandes propres à bash).

--
François Lafont
Publicité
Poster une réponse
Anonyme