Skip to content

Commit ea69d4e

Browse files
committed
Adaptations suite à la remarque de Loïc
1 parent 7fbd5d3 commit ea69d4e

4 files changed

Lines changed: 42 additions & 28 deletions

File tree

core/class/script.class.php

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,16 +228,28 @@ public function execute($_options = null) {
228228
if ($this->getType() == 'info' && isset(script::$_requet_cache[$request])) {
229229
return script::$_requet_cache[$request];
230230
}
231-
$cmd = 'sudo chmod +x ' . explode(' ', $request)[0] . ' 2>/dev/null;';
232-
$use_shebang = $this->getConfiguration('useShebang', '0') == '1';
233-
if (!$use_shebang && strpos($request, '.php') !== false) {
231+
$first_element = explode(' ', $request)[0];
232+
$use_shebang = false;
233+
$from_path = false;
234+
if (file_exists($first_element)) {
235+
$env_path = explode(PATH_SEPARATOR, getenv('PATH'));
236+
$from_path = in_array(dirname($first_element), $env_path);
237+
if (!$from_path) {
238+
$shebang = trim(file_get_contents($first_element, false, null, 0, 3));
239+
$use_shebang = $shebang == '#!/';
240+
}
241+
if (!is_executable($first_element)) {
242+
$cmd = 'sudo chmod +x ' . $first_element . ' 2>/dev/null;';
243+
}
244+
}
245+
if (!$from_path && !$use_shebang && substr($request, -4) === '.php') {
234246
$cmd .= 'php ' . $request;
235-
} elseif (!$use_shebang && strpos($request, '.rb') !== false) {
236-
$cmd .= 'ruby ' . $request;
237-
} elseif (!$use_shebang && strpos($request, '.py') !== false) {
238-
$cmd .= 'python ' . $request;
239-
} elseif (!$use_shebang && strpos($request, '.pl') !== false) {
247+
} elseif (!$from_path && !$use_shebang && substr($request, -3) === '.pl') {
240248
$cmd .= 'perl ' . $request;
249+
} elseif (!$from_path && !$use_shebang && substr($request, -3) === '.py') {
250+
$cmd .= 'python ' . $request;
251+
} elseif (!$from_path && !$use_shebang && substr($request, -3) === '.rb') {
252+
$cmd .= 'ruby ' . $request;
241253
} else {
242254
$cmd .= $request;
243255
}

desktop/js/script.js

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,15 @@ $("#table_cmd tbody").delegate(".cmdAttr[data-l1key=configuration][data-l2key=re
3333
if ($(this).value() == 'script') {
3434
$(this).closest('tr').find('.browseScriptFile').show()
3535
$(this).closest('tr').find('.editScriptFile').show()
36+
37+
$(this).closest('tr').find('.tdRequest').attr('colspan', '2')
38+
$(this).closest('tr').find('.tdOptions').hide()
3639
} else {
3740
$(this).closest('tr').find('.browseScriptFile').hide()
3841
$(this).closest('tr').find('.editScriptFile').hide()
42+
43+
$(this).closest('tr').find('.tdRequest').attr('colspan', '1')
44+
$(this).closest('tr').find('.tdOptions').show()
3945
}
4046
})
4147

@@ -100,7 +106,7 @@ function addCmdToTable(_cmd) {
100106
tr += '<span class="subType" subType="' + init(_cmd.subType) + '"></span>'
101107
tr += '</td>'
102108

103-
tr += '<td class="tdRequest">'
109+
tr += '<td class="tdRequest" colspan="2">'
104110
tr += '<div class="btn-group" role="group">'
105111
tr += '<span class="input-group" style="margin-top : 5px;">'
106112
tr += '<a style="width:30px" class="btn btn-default browseScriptFile btn-xs roundedLeft" title="{{Parcourir}}"><i class="far fa-folder-open"></i></a>'
@@ -110,14 +116,10 @@ function addCmdToTable(_cmd) {
110116
tr += '<textarea style="height : 95px;margin-top:5px;" class="cmdAttr form-control input-sm" data-l1key="configuration" data-l2key="request"></textarea>'
111117
tr += '</td>'
112118

113-
tr += '<td class="tdOptions">'
114-
tr += '<div class="requestTypeConfig" data-type="script">'
115-
tr += '<center>'
116-
tr += '<span><label class="checkbox-inline"><input type="checkbox" class="cmdAttr" data-l1key="configuration" data-l2key="useShebang"/>{{Interpréteur shebang}}'
117-
tr += '<sup><i class="fas fa-question-circle tooltips" title="{{Si cette option est cochée, l\'interpréteur à utiliser est celui de la ligne shebang}}"></i></sup>'
118-
tr += '</label></span> '
119-
tr += '</center>'
120-
tr += '</div>'
119+
tr += '<td class="tdOptions" style="display : none;">'
120+
121+
//tr += '<div class="requestTypeConfig" data-type="script">'
122+
//tr += '</div>'
121123

122124
tr += '<div class="requestTypeConfig" data-type="http" style="display : none;">'
123125
tr += '<center>'
@@ -186,7 +188,8 @@ function addCmdToTable(_cmd) {
186188
tr += '</div>'
187189
tr += '</div>'
188190
tr += '</div>'
189-
tr += '</td>'
191+
192+
tr += '</td>' // tdOptions
190193

191194
tr += '<td>'
192195
tr += '<label class="checkbox-inline"><input type="checkbox" class="cmdAttr" data-l1key="isVisible" checked/>{{Afficher}}</label> '

docs/fr_FR/changelog.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
# xx/07/2025
1010

11-
- Ajout de la possibilité de ne pas forcer l'interpréteur selon une règle propre à Jeedom et qui est incompatible avec certains systèmes (python3 sous Debian 11+).
1211
- Correction de l'erreur d'affichage des options pour un type "HTTP" lors de la création d'une commande alors que le type "script" est sélectionné à ce moment.
12+
- Traitement différent pour les commandes de type Script : le forçage de l'interpréteur selon une règle propre au plugin et qui est incompatible avec certains systèmes (python3 sous Debian 11+) est conditionné afin que le script soit lancé comme s'il l'était dans un shell sauf si le forçage de l'interpréteur est nécessaire.
1313
- Mise à jour de la documentation et petites corrections de celle-ci
1414

1515
# 01/07/2024

docs/fr_FR/index.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Vous retrouvez ici la liste des commandes :
5151
- Le bouton **Editer** : permet d’éditer à l’aide d’un éditeur de code interne un des fichiers contenus dans le répertoire permettant l’accès au code du fichier.
5252
- Le bouton **Nouveau** : permet de créer un fichier de commande.
5353

54-
> Ne pas oublier de saisir le nom du fichier ainsi que son extension complète sous peine de voir votre superbe script ne pas fonctionner. Sans extension Jeedom ne saura pas reconnaître le langage associé à votre fichier. Il est possible de contourner ce fonctionnement en cochant la case "Interpréteur shebang", ce point est détaillé plus loin.
54+
> Ne pas oublier de saisir le nom du fichier ainsi que son extension complète sous peine de voir votre superbe script ne pas fonctionner. Sans extension Jeedom ne saura pas reconnaître le langage associé à votre fichier. Il est possible de contourner ce fonctionnement en précisant l'interpréteur dans la ligne shebang ou en plaçant l'interpréteur en première position de la ligne de commande, ce point est détaillé plus loin.
5555

5656
- Le bouton **Supprimer** : permet de supprimer un fichier de commande.
5757

@@ -194,25 +194,24 @@ Action : Lancez le script, via un équipement virtuel, lié à votre script !
194194

195195
Le plus sympa mais pas le plus simple à expliquer.
196196

197-
**Prérequis : savoir développer un script en php, python, perl ou ruby.**
197+
**Prérequis : savoir développer un script**
198198

199199
>**IMPORTANT**
200200
>
201-
> L'extension de votre script doit absolument correspondre à son type. En effet Jeedom se base sur l'extension du script pour l'exécutable à lancer
201+
> - Si le script en première position de la ligne de commande contient une ligne shebang, le plugin script lancera un shell qui l’exécutera en se basant sur la directive de la 1ère ligne (shebang).
202+
> - Si le premier élément de la ligne de commande est un exécutable reconnu par le système, par exemple `/usr/bin/python3`, le plugin script lancera un shell qui exécutera cette ligne de commande.
203+
> - Si le script en première position de la ligne de commande ne contient pas de ligne shebang ET que le premier élément de laligne de commande n'est pas un exécutable reconnu par le système, l'extension de votre script doit absolument correspondre à son type. En effet le plugin script se base alors sur l'extension du script pour l'exécutable à lancer.
202204
203-
Si le nom de votre fichier ne contient pas :
204-
- .php .py .pl .rb
205+
Dans ce dernier cas, si le nom de votre fichier ne termine pas par .php .py .pl ou .rb, le plugin script lancera un shell qui l’exécutera comme en ligne de commande.
205206

206-
ou si la case "Interpréteur shebang" est cochée, le plugin script lancera un shell qui l’exécutera en se basant sur la directive de la 1ère ligne (shebang).
207-
Exemple :
207+
Exemples de ligne shebang :
208208

209-
```bash
209+
```
210210
#!/bin/csh -f
211211
#!/bin/ksh
212212
#!/usr/bin/env python3
213213
#!/usr/bin/env php
214214
#!/usr/bin/env node
215-
etc ...
216215
```
217216

218217
Le script de monitoring température du Raspberry va servir d’exemple pour l’utilisation du type de script : Script

0 commit comments

Comments
 (0)