Suite à cela question J'ai utilisé la commande suivante dans un script bash:
find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$1" &>/dev/null ;then echo"$1" >>${log_file} ;svnadmin verify "$1" 2>>{log_file} ;fi' _ {} \;
Les deux variables sont définies au début du script. La variable $ svn_root est développée de manière appropriée, mais pas la variable $ log_file.
Je vois que la variable n'est passée dans aucune des commandes -exec bash -c
, je suppose que c'est parce que c'est un sous-shell? Je peux glisser log_file=/path/to/log ;
devant la echo
partie de la ligne, mais ce genre de code fixe cette partie de la commande, si je modifie la variable dans le script sans la modifier dans la commande find I Sera sortie dans deux fichiers journaux distincts!
Puis-je importer/exporter cette variable dans ce sous-shell (si c'est ce que c'est)?
Il y a principalement deux manières:
Transmettez-le comme deuxième argument au shell
find ... -exec bash -c '...' _ {} "$log_file" \;
Et ensuite, vous utilisez "$2"
au lieu de ${log_file}
dans le script
Passez le via l'environnement:
log_file=$log_file find ... -exec bash -c '...' _ {} \;
BTW, ce n'est pas un sous-shell.
En utilisant
find ${svn_root} -maxdepth 2 -type d -exec bash -c 'if svnlook info "$0" &>/dev/null ;then echo"$0" >> "$1" ;svnadmin verify "$0" 2>> "$1" ;fi' {} "$log_file" \;
Vous avez besoin de $0
et $1
, car il ne s'agit ni d'une fonction ni d'un script.
Vous devriez pouvoir voir de telles variables dans votre sous-shell si vous utilisiez des guillemets doubles avec bash -c ""
.
Une méthode plus simple consisterait à simplement export
le log_file
dans votre script principal, comme suit:
export log_file