Mon problème était similaire et j'ai utilisé des idées mixtes postées ici.
Nous avons un serveur avec un script qui envoie des e-mails. Et puis nous avons un deuxième serveur qui se connecte au 1er serveur via SSH et l'exécute.
Le nom script est le même sur les deux serveurs et les deux sont en fait exécutés via un bash script.
Sur le serveur 1 (local) bash script nous avons juste :
/usr/bin/php /usr/local/myscript/myscript.php "$@"
Celui-ci réside sur /usr/local/bin/myscript
et est appelé par le serveur distant. Cela fonctionne bien même pour les arguments contenant des espaces.
Mais alors, sur le serveur distant, nous ne pouvons pas utiliser la même logique car le premier serveur ne recevra pas les citations de "$@"
. J'ai utilisé les idées de JohnMudd et de Dennis Williamson pour recréer le tableau des options et des paramètres avec les guillemets. J'aime l'idée d'ajouter les guillemets échappés uniquement lorsque l'élément contient des espaces.
Donc le script distant s'exécute avec :
CSMOPTS=()
whitespace="[[:space:]]"
for i in "$@"
do
if [[ $i =~ $whitespace ]]
then
CSMOPTS+=(\"$i\")
else
CSMOPTS+=($i)
fi
done
/usr/bin/ssh "$USER@$SERVER" "/usr/local/bin/myscript ${CSMOPTS[@]}"
Notez que j'utilise "${CSMOPTS[@]}"
pour passer le tableau des options au serveur distant.
Merci à tous ceux qui ont posté ici ! Ça m'a vraiment aidé !)