Bonjour à tous
Je me trouve confronté à un problème super con: je n'arrive pas à envoyer à find des critères de recherche à partir de variables shell. J'ai pourtant tout essayé
Test 1
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/bin/bash critere="-name \*" echo "critere=[$critere]" set -x find /tmp $critere
Le shell me montre critere=[-name \*] donc là ça me va puis + find /tmp -name '\*' (il m'a rajouté un backslash devant l'étoile pourtant déjà mise entre quotes simples)
Test 2
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/bin/bash critere='-name *' echo "critere=[$critere]" set -x find /tmp $critere
Là, ça me donne critere=[-name *] puis + find /tmp -name x y z t ... (tous mes fichiers présents dans mon dossier courant). Il a interprété l'étoile avant de l'envoyer au find !!!
Ok, arrêtons donc l'interprétation
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #!/bin/bash critere='-name *' echo "critere=[$critere]" set -x find /tmp "$critere"
Et là, j'ai critere=[-name *] donc toujours bon puis + find /tmp '-name *' avec des quotes devant l'option -name ce qui me donne un find: prédicat inconnu « -name * ».
J'y arrive en mettant eval find /tmp $critere mais n'y a-t-il pas moyen de faire sans ???
Si quelqu'un a une idée...
Partager