Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bash : quelques petites questions...

18 réponses
Avatar
David BERCOT
Bonjour,

Je viens de reprendre un script qui travaille sur des serveurs ESX et,
apr=C3=A8s y avoir pass=C3=A9 deux jours, je pense qu'il est temps que je
demande un peu d'aide ;-)

Bref, je souhaite faire un traitement sur l'ensemble (ou presque) des
fichiers vmdk de mes VM. Pour cela, je partais sur quelque chose du
genre :
ssh mon_serveur_esx "for monfile in ls
\"/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test
d'installation De\"/*.vmdk ; do echo \"\${monfile}\" ; done"

Premier souci : la commande ls appara=C3=AEt dans le r=C3=A9sultat ! Je ne
comprends pas bien pourquoi... Je ne devrais avoir, de mon point de
vue, que les lignes correspondantes...

Ensuite, je souhaiterais supprimer certaines lignes en ajoutant un
grep :
ssh esx-supp-02.cnin.insee.fr "for monfile in ls
\"/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test
d'installation De\"/*.vmdk | grep -v 00000 ; do echo \"\${monfile}\" ;
done"
L=C3=A0, il me r=C3=A9pond : ash: syntax error: "|" unexpected
Je suppose que les deux commandes devraient =C3=AAtre un peu isol=C3=A9es m=
ais je
ne vois pas comment...

J'ai d'autres probl=C3=A8mes mais je pense que, pour commencer, si
j'obtenais quelques indices sur ces premiers probl=C3=A8mes, ce serait d=C3=
=A9j=C3=A0
un bon d=C3=A9but.

Merci d'avance pour toutes les pistes que vous pourrez m'indiquer.

David.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20120504141408.2b8795fa@debian-david

8 réponses

1 2
Avatar
David BERCOT
Le Fri, 4 May 2012 17:26:11 +0200,
Stephane Ascoet a écrit :
Le vendredi 4 mai 2012 17:15:53, David BERCOT a ecrit :
>Il y a des espaces dans les noms de tes .vmdk ?

En effet :-(


Bonjour, c'est tres mal.
Et en suivant la piste de IFS? Tente "IFS=$'n';" en tete de la
commande qui a le moins mal fonctionne jusqu'a present



Alors, voici un script que j'exécute directement sur l'ESX :
#!/bin/sh
OLDIFS="$IFS"
IFS=$'n'
monpath="/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 -
Test d'installation De"
for monfile in `ls "$monpath"/*.vmdk | grep -v 00000`
do echo "${monfile}"
done
IFS="$OLDIFS"

Et comme résultat, j'ai des retours à la ligne à chaque "n" ;-) :
~ # ./test
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De-flat.vmdk
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De.vmdk

Ensuite, en supprimant l'IFS, il revient à la ligne à chaque blan c :
~ # ./test
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038
-
Test
d'installation
De/s47z038
-
Test
d'installation
De-flat.vmdk
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038
-
Test
d'installation
De/s47z038
-
Test
d'installation
De.vmdk

alors que je devrais avoir :
~ # ./test
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test
d'installation De/s47z038 - Test d'installation De-flat.vmdk
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test
d'installation De/s47z038 - Test d'installation De.vmdk

David.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
JF Straeten
Re,

On Fri, May 04, 2012 at 05:15:53PM +0200, David BERCOT wrote:

[...]

>Mmmm... non, la construction avec $() (dollar + parenthèses) servait à
>récupérer le résultat de la commande placée dedans. Pour protéger la
>variable, il faut ${} (dollar + accolades). D'ailleurs, c'est ce que
>tu fais ci-dessous :
>
>> ssh mon_serveur_esx "for monfile in
>> "/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test
>> d'installation De"/*.vmdk ; do echo "${monfile}" ; done"

Certes, mais là, c'est différent, non ?
Tu me proposes de remplacer $() par ${} ?



Non, non :-)

Faire comme tu faisais avec la variable était bon. Le $() n'était là
que pour « encapsuler » le 'ls' s'il était compliqué.


>Il y a des espaces dans les noms de tes .vmdk ?

En effet :-(



Comme l'a dit quelqu'un d'autre, pas bon en shell :-/

Je remarque aussi que le temps de chercher à quoter comme il faut
suffit souvent pour avoir un truc fonctionnel en Perl, mais ça ne
répond pas à la question ;)


>Tu saurais coller un ls -l du répertoire qui les contient, avec le
>path absolu ?

Euh oui, mais pourquoi ?



Pour essayer de comprendre ce que tu veux faire, et voir la gueule du
répertoire sur lequel tu appliques ça.


>@David : tu ne sais pas scripter le traitement des .vmdk, et
>appeler le script par ssh, pour voir ce que ça donne ?> Tu veux
>dire, faire un script sur le serveur et l'appeler ensuite >
>directement ? C'est ce que m'a suggérer Basile en mp ;-)



Oui.


Je pourrais, mais vu que j'ai plein de serveurs à traiter, ça ne me
convient pas trop.



Pourquoi pas ?

Tu ne pourrais pas imaginer un push du script par scp avant de
l'exécuter, par exemple ?

Genre :

scp monScript.sh :~/

ssh ~/monScript.sh


Tu as toujours la bonne version sur ta machine administrative et celui
qui est "injecté" sur le serveur est jetable ; tu t'en fous après et
peux même le supprimer.

C'est juste une idée ;)

A+


--

JFS.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
David BERCOT
Le Fri, 4 May 2012 17:48:52 +0200,
Stephane Ascoet a écrit :
Le vendredi 4 mai 2012 17:42:23, David BERCOT a ecrit :

Et comme résultat, j'ai des retours à la ligne à chaque " n" ;-) :



Il doit y avoir une erreur dans la syntaxe du IFS. C'est tire d'une
astuce de Denis Bodor dans GNU/LInux Magazine France Hors-Serie 34.
Les petites fautes de ce style sont helas frequentes :-(



Oui, je suppose...

Et sinon, il y a une liste speciale pour le scriptage pour eviter de
polluer celle-ci...



Je viens de regarder la liste complète des listes et je ne l'ai pas
trouvé :-(
Je suis preneur si tu as des infos complémentaires...

Merci.

David.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
JF Straeten
Re,

On Fri, May 04, 2012 at 05:42:23PM +0200, David BERCOT wrote:


Alors, voici un script que j'exécute directement sur l'ESX :
#!/bin/sh
OLDIFS="$IFS"
IFS=$'n'
monpath="/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 -
Test d'installation De"



Ici, tu as un retour à la ligne pour de vrai ou la ligne a été coupée
par ton mailer ?



Et comme résultat, j'ai des retours à la ligne à chaque "n" ;-) :
~ # ./test
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De-flat.vmdk
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De.vmdk

Ensuite, en supprimant l'IFS, il revient à la ligne à chaque blanc :



Est-ce que tu ne lui dit pas justement de considérer que la ligne
finit au "n" ?

Qu'est-ce que ça donne avec IFS vide ?

A+


--

JFS.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
David BERCOT
Le Fri, 4 May 2012 18:05:19 +0200,
"JF Straeten" a écrit :
Alors, voici un script que j'exécute directement sur l'ESX :
#!/bin/sh
OLDIFS="$IFS"
IFS=$'n'
monpath="/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 -
Test d'installation De"



Ici, tu as un retour à la ligne pour de vrai ou la ligne a étà © coupée
par ton mailer ?



Non, non, ça a été coupé par Claws-Mail...

Et comme résultat, j'ai des retours à la ligne à chaque " n" ;-) :
~ # ./test
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De-flat.vmdk
/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 - Test d'i
stallatio
De/s47z038 - Test d'i
stallatio
De.vmdk

Ensuite, en supprimant l'IFS, il revient à la ligne à chaque b lanc :



Est-ce que tu ne lui dit pas justement de considérer que la ligne
finit au "n" ?



Si, quand j'avais l'IFS...

Qu'est-ce que ça donne avec IFS vide ?



Ben justement, là, l'IFS était vide.

Je crois que je vais m'arrêter là pour aujourd'hui ;-)
Je reprendrai la semaine prochaine...

Peut-être que, à tête reposée, ça fonctionnera mie ux !

David.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
J
Le trolldi 04 mai 2012 à 16:46 +0200, Bruno Richard a écrit :

et avec une syntaxe de ce style ? ssh serveur 'for i in `ls /tmp/`;do
echo $i;done'

les ' permettent de banaliser les caractères i.e. empêcher le shell
courant d'interpreter les caractères spéciaux et notamment `et $ les `
permettent d'exécuter la commande ls /tmp et de renvoyer son résultat
au for.



Oui, sauf qu'il m'a bien semblé voir dans le manuel que les `` étaient
"deprecated" donc à éviter.


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sébastien MARQUE
Bonjour,

j'arrive un peu tard, mais j'espère pas trop :)

IFSbackup=UFS
IFS=$(echo -ne "nb")
for monfic in $(ls -1 monrep); do echo ${monfic}; done
IFS=IFSbackup

devrait faire le job, l'IFS étant désormais la fin de ligne (assurée par
l'option -1 de ls).

Hope this helps.

seb


Le 04/05/2012 17:48, Stephane Ascoet a écrit :
Le vendredi 4 mai 2012 17:42:23, David BERCOT a ecrit :

Et comme résultat, j'ai des retours à la ligne à chaque "n" ;-) :



Il doit y avoir une erreur dans la syntaxe du IFS. C'est tire d'une astuce de
Denis Bodor dans GNU/LInux Magazine France Hors-Serie 34. Les petites fautes
de ce style sont helas frequentes :-(
Et sinon, il y a une liste speciale pour le scriptage pour eviter de polluer
celle-ci...



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Denis Mugnier
Bonjour;

Le 04/05/2012 18:10, David BERCOT a écrit :
Le Fri, 4 May 2012 18:05:19 +0200,
"JF Straeten" a écrit :
Alors, voici un script que j'exécute directement sur l'ESX :
#!/bin/sh
OLDIFS="$IFS"
IFS=$'n'
monpath="/vmfs/volumes/4f33a50e-0762c7f9-9763-001a6436484a/s47z038 -
Test d'installation De"







Un truc bête, mais pour jouer avec IFS comme tu le fais, je crois qu'il
faut être dans bash et pas dans sh ;o)
donc remplaçer

#!/bin/sh

par

#!/bin/bash

voila mes 2 cents...

Denis

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
1 2