#1 Le 30/08/2008, à 13:18
- ®om
Paramètres avec espaces et séparateur \n
Salut,
Tout d'abord, un script monscript qui permet de voir les arguments passés en ligne de commande :
#!/bin/sh
for arg; do echo "-- $arg"; done
Supposons que dans une variable, on ait n chemins séparés par des '\n' (ou chaque chemin peuvent comporter des espaces), et qu'on veuille passer chacun de ces chemins en paramètre d'un autre script :
#!/bin/sh
paths="/tmp/a
/tmp/b c
/tmp/d/e f/g"
./monscript ??????
Si à la place des ?????? je mets $paths (./monscript $path), j'obtiens :
-- /tmp/a
-- /tmp/b
-- c
-- /tmp/d/e
-- f/g
Si par contre je mets "$paths" (./monscript "$path"), j'obtiens :
-- /tmp/a
/tmp/b c
/tmp/d/e f/g
Comment donc obtenir :
-- /tmp/a
-- /tmp/b c
-- /tmp/d/e f/g
(autrement dit, 1 chemin par argument)?
Hors ligne
#2 Le 30/08/2008, à 13:40
- Yannick_LM
Re : Paramètres avec espaces et séparateur \n
Le plus simple à mon avis est de jouer avec la variable IFS
(internal field separator: en gros, le truc qui sépare les arguments)
Quelque chose du genre:
OLD_IFS=$IFS
IFS="
"
paths="/tmp/a
/tmp/b c
/tmp/d/e f/g"
./monscript $paths
IFS=$OLD_IFS
Dernière modification par Yannick_LM (Le 30/08/2008, à 13:41)
Trucs et astuces pour Vim
Ma web page avec des trucs dessus ...
Hors ligne
#3 Le 30/08/2008, à 14:42
- Alain.g
Re : Paramètres avec espaces et séparateur \n
En bash on utiliserait un tableau :
#!/bin/bash
paths=("/tmp/a" "/tmp/b c" "/tmp/d/e f/g")
./monscript "${paths[@]}"
Xubuntu Karmic !
Hors ligne
#4 Le 30/08/2008, à 19:50
- Totor
Re : Paramètres avec espaces et séparateur \n
Pour répondre à ta question, une solution sans changer grand chose, si ce n'est monscript.sh :
#!/bin/bash
no=0
numArg=1
for arg;
do
let no=${no}+1
if [ ${no} -eq ${numArg} ]; then
echo -e "${arg}"|while read chemin
do
echo "-- ${chemin}"
done
fi
done
Au besoin, change la valeur de numArg.
Aussi, lors de l'appel à monscript.sh, encadre paths avec des guillemets pour que ça fonctionne.
Sinon, tu peux aussi faire comme ceci :
Dans ton premier script :
echo -e "/tmp/a\n/tmp/b c\n/tmp/d/e f/g"|monscript.sh <arg1> <arg2> <arg...>
Ensuite, au début du script monscript.sh :
while read chemin
do
echo "-- ${chemin}"
done
EDIT : Bien entendu, <arg1> <arg2> <arg...> étant d'autres paramètres que des chemins !
Dernière modification par Totor (Le 30/08/2008, à 19:52)
-- Lucid Lynx --
Hors ligne