How to escape parameters with special chars ? Comment utiliser un paramètre avec des caractères spéciaux?

Approximate english version below

Bonjour à toutes et tous. Et merci pour tout ce que vous apportez à cette communauté.

Mon serveur YunoHost

Matériel: Je ne sais pas, un vieux PC pro installlé chez un ami.
Version de YunoHost: 11.2.20.2
J’ai accès à mon serveur : En SSH | Par la webadmin
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non

Description du problème

En travaillant à modifier le package galette_ynh (mais la question n’est pas spécifique à celui-ci), je me suis heurté à une difficulté : le package prend en paramètre un nom d’admin et un mot de passe [install.password] type = "password", puis les utilise lors de l’install avec un appel de la forme
ynh_local_curl "/installer.php" "install_adminlogin=$admin" "install_adminpass=$password" "install_adminpass_verif=$password"
Tout se passe bien sauf si $password contient une esperluette (&) ou, j’imagine, d’autres caractères spéciaux.
J’ai essayé des syntaxes de la forme ${password@Q}, ‘$password’, … mais je n’ai pas trouvé la bonne combinaison. Manifestement, au moins quand il y a une esperluette qu’ynh_local_curl utilise pour construire sa chaine d’arguments, la page web ne reçoit pas le bon mot de passe.

Si vous savez comment faire, merci d’avance :slight_smile:

Cordialement,
Alain


English (more or less :crazy_face: )
Hello everyone. Thank you for what you do fir this community.

My YunoHost server

Matériel: Je ne sais pas, un vieux PC pro installlé chez un ami.
Version de YunoHost: 11.2.20.2
J’ai accès à mon serveur : En SSH | Par la webadmin
Êtes-vous dans un contexte particulier ou avez-vous effectué des modificiations particulières sur votre instance ? : non

Description of the trouble

While working on modifying the galette_ynh package (but the question is not specific to this one), I encountered a difficulty: the package takes as parameters an admin name and a password [install .password] type = "password", then uses them during installation with a call of the form
ynh_local_curl "/installer.php" "install_adminlogin=$admin" "install_adminpass=$password" "install_adminpass_verif=$password"

Everything works fine unless $password contains an ampersand (&) or, I imagine, other special characters.

I tried syntaxes like ${password@Q}, ‘$password’, … but I didn’t find the right combination. Obviously, at least when there is an ampersand that ynh_local_curl uses to construct its argument chain, the web page is not receiving the correct password.

If you know how to do it, thanks in advance :slight_smile:

Have fun,
Alain

English (more or less)
I found a way which seems to be operational. I added a line before calling ynh_local_curl with the parameter “$password” which looks like

password=`jq -Rj @uri <<<$password`

This does the job, but I don’t like it too much as jq is an external (json) application and not an internal bash command. And a question arose : should/could it be done for every argument of the ynh_local_curl call or just for passwords ?


Français
J’ai trouvé une méthode qui semble marcher. En ajoutant avant l’appel à ynh_local_curl avec un paramèter $password une ligne de la forme

password=`jq -Rj @uri <<<$password`

ça marche. Je n’aime toutefois pas trop la méthode car jq n’est pas une commande interne de bash mais une application json. Mais bon, ça fait le taf.
Mais du coup, je me demande s’il ne faudrait pas - ou si c’est possible de faire ça - faire ça avec tous les arguments de ynh_local_curl.

Merci d’avance pour vos avis.
Cordialement,
Alain

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.