Variable dans une commande Script

Bonjour,
Je recherche une solution pour exécuter la commande suivante où MESSAGE sera remplacé par l’information #message# :

curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "MESSAGE"}' http://{your-mattermost-site}/hooks/xxx-generatedkey-xxx

Avec l’aide de certain d’entre vous, j’ai testé avec un fichier .sh:


Le problème c’est que je reçois le message $1.

Comment faire pour que la variable soit mon message ?

Ils m’ont proposé autre chose, mais qui malheureusement ne fonctionne pas non plus:

Où j’ai une erreur :

[2021-05-28 12:30:35][SCENARIO] Json invalide ou non décodable : <!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><meta name="robots" content="noindex, nofollow"><meta name="referrer" content="no-referrer"><title>Mattermost</title><meta name="mobile-web-app-capable" content="yes"><meta name="application-name" content="Mattermost"><meta name="format-detection" content="telephone=no"><link rel="icon" type="image/png" href="/static/images/favicon/favicon-default-16x16.png" sizes="16x16"><link rel="icon" type="image/png" href="/static/images/favicon/favicon-default-24x24.png" sizes="24x24"><link rel="icon" type="image/png" href="/static/images/favicon/favicon-default-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/static/images/favicon/favicon-default-64x64.png" sizes="64x64"><link rel="icon" type="image/png" href="/static/images/favicon/favicon-default-96x96.png" sizes="96x96"><link rel="stylesheet" class="code_theme"><style>.error-screen{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;padding-top:50px;max-width:750px;font-size:14px;color:#333;margin:auto;display:none;line-height:1.5}.error-screen h2{font-size:30px;font-weight:400;line-height:1.2}.error-screen ul{padding-left:15px;line-height:1.7;margin-top:0;margin-bottom:10px}.error-screen hr{color:#ddd;margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.error-screen-visible{display:block}</style><meta http-equiv="Content-Security-Policy" content="script-src 'self' cdn.rudderlabs.com/ js.stripe.com/v3 "><link href="/static/main.9ef911c6437f8b1ded00.css" rel="stylesheet"><script src="/static/main.a8f8f181c6bb88f0eafe.js"></script><meta name="apple-mobile-web-app-title" content="Mattermost" /><meta name="apple-mobile-web-app-capable" content="yes" /><meta name="apple-mobile-web-app-status-bar-style" content="default" /><link rel="apple-touch-icon" sizes="76x76" href="/static/icon_76x76.png" /><link rel="apple-touch-icon" sizes="72x72" href="/static/icon_72x72.png" /><link rel="apple-touch-icon" sizes="60x60" href="/static/icon_60x60.png" /><link rel="apple-touch-icon" sizes="57x57" href="/static/icon_57x57.png" /><link rel="apple-touch-icon" sizes="152x152" href="/static/icon_152x152.png" /><link rel="apple-touch-icon" sizes="144x144" href="/static/icon_144x144.png" /><link rel="apple-touch-icon" sizes="120x120" href="/static/icon_120x120.png" /><link rel="manifest" href="/static/manifest.json" /></head><body class="font--open_sans enable-animations"><div id="root"><div class="error-screen"><h2>Cannot connect to Mattermost</h2><hr/><p>We're having trouble connecting to Mattermost. If refreshing this page (Ctrl+R or Command+R) does not work, please verify that your computer is connected to the internet.</p><br/></div><div class="loading-screen" style="position:relative"><div class="loading__content"><div class="round round-1"></div><div class="round round-2"></div><div class="round round-3"></div></div></div></div><div id="root-portal"></div><noscript>To use Mattermost, please enable JavaScript.</noscript></body></html>

Sauriez-vous m’aider ?
Merci par avance.
Mathieu

bonjour @OUARZA,
pour le script bash, il manque juste des simple quotes entre le $1.
voici la commande modifiée :

curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "'$1'"}' "http://{your-mattermost-site}/hooks/xxx-generatedkey-xxx"

il est préférable de mettre l’URL entre guillemets, cela afin qu’elle soit prise en compte dans son intégralité dans le cas ou celle-ci contiendrait des caractères spéciaux comme le & qui pourrait être interprété par bash. J’avais fais une réponse détaillée à ce sujet que tu peux trouver dans ce post

Ho merci @mnpg,
J’ai suivi tes conseils et cela fonctionne partiellement.
En effet, via un scénario ou le bouton test, il n’envoie que le premier mot :frowning:

Sais-tu comment je pourrai y remédier ?

Mathieu

dans ta commande de script jeedom, mets #message# entre guillemets.
si ton message contient des espaces, chaque mot le composant sera considéré comme un argument.
$1 pour le premier mot
$2 pour le 2eme
…etc
en mettant entre guillemets, le message est pris en intégralité et considéré comme un seul et unique argument

1 « J'aime »

Tu es trop fort !
Merci infiniment.

@mnpg, j’ai mis le « #message# » et cela fonctionne si je mets &nbsp; en espace dans mon scénario.
Ce comportement est-il normal ?

Dois-je utiliser cette syntaxe ?

'{"text": "'$1'"" ""'$2'"" ""'$3'"}'

Mathieu

peux tu me donner un exemple de message, je ne comprends pas ton explication

Voici mon scénario pour tester:


Avec comme requête .sh:

'{"text": "'$1'"}'

Si je mets dans le message :
Bonjour&nbsp;Ceci&nbsp;est&nbsp;un&nbsp;test.
Cela fonctionne sans problème.

Si je mets dans le message :
Bonjour Ceci est un test.
Je ne reçois rien :frowning:

Est-ce plus clair ?

Mathieu

si tu remplace « #message# » par « Bonjour Ceci est un test » dans la commande de script jeedom, cela donne quoi si tu l’executes?

Je ne reçois rien.

Bonsoir,

Je n’y connais rien à votre problème, mais en revanche, #message# est déjà utilisé par Jeedom.
Est-il possible que cela soit la cause de votre problème ?

Bonsoir @Fabrice,
L’idée est d’utiliser la commande « message » dans un scénario pour que ce message soit intégré à la commande Script.

Mathieu

juste pour savoir, si tu mets "Bonjour&nbsp;Ceci&nbsp;est&nbsp;un&nbsp;test." au lieu de « #message# » dans la commande de script jeedom et que tu l’executes, cela fonctionne?

Hello @mnpg,
Yep, ça marche :slight_smile:
Cela veut-il dire que dans le script .sh, il faut lui dire si tu as un espace tu remplaces par &nbsp; ?

Mathieu

salut, oui tout a fait
à ce moment-là, le mieux -la façon la plus simple-c’est de rajouter la ligne suivante au script avant la ligne du curl :
message = $(echo $1 | tr ' ' '&nbsp;')

et modifier la suivante en remplacement $1 par ${message} :

curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "'${message}'"}' "http://{your-mattermost-site}/hooks/xxx-generatedkey-xxx"

comme ça, quelque soit les messages que tu mettras dans tes scenarios (messages avec des espaces), les espaces des messages seront remplacés dans le script par des espaces insécables.

à tester

j’oubliais, #message# est toujours entre guillemets dans la commande de script

EDIT : petit boulette dans ce que je t’ai dis, c’est message=..., pas $message=...

Malheureusement cela ne fonctionne pas et à vrai dire, je ne sais pas pourquoi (pas de log).
Je vais retenter plus tard, j’ai l’impression que le serveur mattermost ne répond plus.

Mathieu

je pense que l’on touche au but. Tiens moi au courant

Oui, avec plaisir.
Merci beaucoup pour l’aide apportée :slight_smile:

Mathieu

@mnpg
petite question, c’est normal les { } au niveau de "'${message}'" ?

Mathieu

$var : C’est une écriture simplifiée de ${var}
perso j’utilise par habitude ${var}, on l’utilise beaucoup pour lire les valeurs de tableaux ${tab[1]}

1 « J'aime »