web-dev-qa-db-fra.com

Mot de passe compliqué dans le script bash

J'ai écrit un script pour appeler l'API, code comme ci-dessous:

#!/bin/bash    
curl -s "https://openapi.domain.com/api/rest/login?user=khoitran&pass=gkoq@Ggk!5648@#&output=json"

le script n'a pas fonctionné, j'ai donc essayé de l'exécuter en dehors du script pour découvrir ce qui n'allait pas. Il se trouve que ma passe compliquée est la cause

vagrant@vagrant-ubuntu-trusty-64:~$ curl -s "https://openapi.domain.com/api/rest/login?user=khoitran&pass=gkoq@Ggk!5648@#&output=json"
-bash: !5648: event not found

(ma passe est: gkoq @ Ggk! 5648 @ #)

J'ai essayé plusieurs façons de gérer ce mot de passe (bien sûr, sauf le changer, lol), mais rien ne fonctionne. Pourriez-vous s'il vous plaît conseiller.

1
Khoi.T

J'ai finalement trouvé un moyen de le faire. Utilisez une méthode appelée urlencode pour analyser le passe dans "gkoq% 40Ggk% 215648% 40% 23", puis insérez-le directement dans mes scripts. Pour analyser le laissez-passer, utilisez ce lien https://www.tools4noobs.com/online_php_functions/urlencode/

1
Khoi.T

Le ! n'est pas traduit en tant que !, il est en train de l'exécuter en tant que commande. Donc, mettez votre mot de passe entre guillemets simples ':

'gkoq@Ggk!5648@#'

Vous pouvez le tester avec une ligne d'écho pour vous assurer qu'il fonctionne correctement:

:~$ echo 'gkoq@Ggk!5648@#'
gkoq@Ggk!5648@#

Définissez maintenant la variable pass:

:~$ pass='gkoq@Ggk!5648@#'
:~$ echo $pass
gkoq@Ggk!5648@#

J'espère que cela t'aides!

1
Terrance