Ajouter des parameters bash et transmettre à un autre script

J’ai besoin de passer d’autres parameters originaux et je veux aussi en append d’autres. Quelque chose comme ça:

#!/bin/bash params="-D FOREGROUND" params+=" -c Include conf/dev.conf" /usr/local/apache/bin/apachectl $params "$@" 

Ce code ci-dessus ne fonctionne pas comme prévu si params contient deux parameters ou plus, il est traité comme un seul paramètre.

Le code dans votre exemple devrait fonctionner si la commande suivante est valide lorsqu’elle est exécutée sur la ligne de commande écrite exactement comme ceci:

 /usr/local/apache/bin/apachectl -D FOREGROUND -c Include conf/dev.conf "$@" 

Une recherche rapide sur le Web m’amène à penser que ce que vous voulez, c’est ceci (notez les doubles guillemets supplémentaires):

 /usr/local/apache/bin/apachectl -D FOREGROUND -c "Include conf/dev.conf" "$@" 

Voici comment réaliser cela simplement et de manière fiable avec des tableaux, de manière à éviter les problèmes de “guillemets entre guillemets”:

 #!/bin/bash declare -a params=() params+=(-D FOREGROUND) params+=(-c "Include conf/dev.conf") /usr/local/apache/bin/apachectl "${params[@]}" "$@" 

Le tableau params contient 4 chaînes ( "-D" , "FOREGROUND" , "-c" et "Include conf/dev/conf" ). L’expansion du tableau ( "${params[@]}" , notez que les guillemets sont importants ici les développe dans ces 4 chaînes, comme si vous les aviez écrits avec des guillemets doubles (c’est-à-dire sans séparer les mots).

L’utilisation de tableaux avec ce type d’extension est un moyen flexible et fiable de créer des commandes et de les exécuter avec une simple extension.

Si le problème est l’espace dans le paramètre “-c Include conf / dev.conf”, vous pouvez simplement utiliser un retour arrière pour préserver le caractère espace: params + = “- c Include \ conf / dev.conf”