Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Les Langages Du Web _ App/script pour remplacer commande dans Terminal

Écrit par : gigatoaster 21 Aug 2018, 15:55

Bonjour

Attention je n'y connais rien à la programmation. J'ai installé une web app pour contrôler Roon en suivant ces instructions : https://github.com/pluggemi/roon-web-controller

C'est super compliqué mais une fois que ça fonctionne on se rend compte que c'est ultra simple en fait. Ça doit pour ça que les devs aiment coder, ou pas. Bref suffit de faire des copier/coller, facile la vie des devs haha!

Cependant pour lancer l'app je dois à chaque fois ouvrir le Terminal et taper la commande pour lancer l'app.

Je ne suis pas une machine donc j'aimerais savoir si il existe une possibilité de créer une icône ou un script qui en cliquant dessus fasse tout automatiquement.

D'avance merci!

Écrit par : teddy7545 21 Aug 2018, 17:42

Bonjour,

Quelle commande tape tu dans le terminal pour lancer ton application ?
Quelle est le nom et l'extension du fichier que tu lance ?
A quel endroit ce fichier est t'il stocké ? (Chemin ?)
S'agit t'il d'un script shell ?

Pour exécuter une commande terminal juste en cliquant sur un icone, tu peux simplement utiliser dans l'éditeur d'AppleScript la commande do shell script suivi par le nom du script à lancer avec son chemin absolu (exemple ci-dessous à supposer que le script que tu cherche à lancer s'appelle myShellScript.sh

Code
do shell script "/Users/path/to/file/myShellScript.sh"

Sauvegarde ce court applescript en tant qu'application et ça devrait fonctionner.

Un petit guide plus détaillé http://www.ohmymac.fr/creer-une-application-pour-lancer-un-programme-terminal-avec-un-applescript/ mais suivant le besoin si tu te contente de mettre ma ligne indiquée plus haut le terminal ne devrait pas apparaitre alors que le script suggéré ouvre systématiquement un terminal lors du lancement de la commande.

Écrit par : gigatoaster 22 Aug 2018, 01:36

Bonjour

Merci de prendre le temps de m'expliquer!

La commande que je lance dans le Terminal est la suivante :

Code
cd roon-web-controller/
node app.js


Le nom du fichier et l'extension est app.js et le chemin est :

Code
/Users/mba/roon-web-controller


Je ne sais pas s'il s'agit d'un script Shell.

J'ai essayé la commande suivante mais j'ai le message d'erreur "No such file or directory (number 127)"

Code
do shell script "/Users/mba/roon-web-controller/app.js.sh"


Voici où est physiquement l'app :

https://ibb.co/frds0z




Écrit par : teddy7545 22 Aug 2018, 07:08

Bonjour

Dans ton cas il ne s'agit pas d'un shell script il ne faut donc pas ajouter l'extension .sh
Normal que le terminal te dise donc que le répertoire ou le nom de fichier entré n'existe pas.
Dans ton cas le répertoire est juste mais le fichier app.js.sh n'existe pas.

Pour cela que j'avais anticipé en te demandant quel commande tu faisais wink.gif
et ou ton fichier se trouvait.

Essai la commande suivante en remplacement dans l'éditeur applescript

Code
do shell script "cd /Users/mba/roon-web-controller/; node app.js"

J'ai remis tes deux commandes dans la même ligne (séparée par un ; )
J'aurais également pu faire une seule commande qui lance directement app.js avec le bon chemin mais ne sachant pas le détail de ce que ça fait je préfère te conseiller d'exécuter la commande cd (change directory) comme tu as l'habitude de le faire.

En une ligne ça aurait donné
Code
do shell script "node /Users/mba/roon-web-controller/app.js"

Tu peux tester le script depuis l'éditeur d'abord.
Quand ça fonctionne il faut enregistrer comme application sur ton bureau par exemple.
En cliquant sur cette application la commande devrait également se lancer.

Écrit par : yponomeute 22 Aug 2018, 08:07

Il y a l'excellent https://sveinbjorn.org/platypus qui permet de créer des applications à partir de scripts (shell ou autres)

Écrit par : gigatoaster 23 Aug 2018, 09:11

Merci!

Mais le script ne fonctionne pas, j'ai ce message d'erreur :

Code
sh: node: command not found


unsure.gif

Écrit par : teddy7545 23 Aug 2018, 09:38

Bonjour,

Quelle commande as tu essayé ?
La première ou la deuxième ?
Si c'est la première et que tu l'as copié collé, essai d'effacer et de remettre l'espace devant "node" (il m'arrive d'avoir ce genre d'erreur quand j'utilise le terminal)
Sinon essai aussi le deuxième script (comme il y a pas d'espace).

Enfin si ça ne fonctionne pas c'est sans doute qu'il ne connait pas le chemin de la commande node (dans ce cas il faudra lui indiquer en dur dans la commande)
Node n'est pas une commande standard dans OSX... tu as donc dû l'installer à un moment.
Ton terminal est paramétré pour chercher les commandes à certain endroits (et lors d'installation spécifiques quelques emplacements sont ajoutés).
Il est probables que le shell utilisé par applescript ne bénéficie pas de ces réglages par défauts (et ta commande n'est pas rangée dans un des endroit qu'ils connait pas défaut).
Pour connaitre le chemin de ta commande tape la commande suivante dans le terminal sur lequel tu lance ton application habituellement :

Code
which node

Par exemple pour chercher l'emplacement de ma commande sed sur mon terminal (je n'ai pas de node) je fais :
Citation
MacBook-Pro-de-teddy:Desktop teddy$ which sed
(tapes uniquement la commande en gras) et la réponse chez moi est
Citation
/usr/bin/sed

En transposant sur ta commande node, tu remplace node dans le script par /usr/bin/node (en prenant bien sur le chemin que tu aura obtenu toi.
Ton script deviendrait alors:
Code
do shell script "cd /Users/mba/roon-web-controller/; /usr/bin/node app.js"
ou
Code
do shell script "/usr/bin/node /Users/mba/roon-web-controller/app.js"


Edit: je viens de me rendre compte qu'il y avait une petite erreur sur le deuxième script du message 4 d'hier --> corrigé ici et dans le message 4 aussi

Écrit par : gigatoaster 23 Aug 2018, 10:45

En suivant tes instructions, j'obtiens ce résultat :

Code
do shell script "/Users/mba/roon-web-controller/usr/local/bin/node app.js"


Mais j'ai cette erreur :

Code
sh: /Users/mba/roon-web-controller/usr/local/bin/node: No such file or directory

Écrit par : teddy7545 23 Aug 2018, 10:52

Tu as fais un petit mélange entre le script 1 et le 2 ... tongue.gif

La réponse est sans pitié il te dit qu'il n'existe pas de fichier node dans le chemin /Users/mba/roon-web-controller/usr/local/bin/ que tu lui as indiqué ...

Essais plutôt:

Code
do shell script "cd /Users/mba/roon-web-controller/; /usr/local/bin/node app.js"
ou
Code
/usr/local/bin/node /Users/mba/roon-web-controller/app.js

Dans le premier on change de répertoire (pour se placer la ou le programme app.js se trouve) et ensuite on lance app.js par la commande node (en décrivant son chemin complet).
Dans le deuxième on lance node avec son chemin complet en lui donnant comme paramètre le chemin complet de app.js

Écrit par : gigatoaster 23 Aug 2018, 11:02

Ah ah, oui j'ai plus de facilité avec les cocktails que les trucs informatiques laugh.gif

La première commande indique :

Code
Un(e) « / » ne peut pas se trouver ici.


La deuxiéme :

Code
Error: listen EADDRINUSE :::8080
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at Server.setupListenHandle [as _listen2] (net.js:1355:14)
    at listenInCluster (net.js:1396:12)
    at Server.listen (net.js:1480:7)
    at Object.<anonymous> (/Users/mba/roon-web-controller/app.js:80:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)" number 1

Écrit par : teddy7545 23 Aug 2018, 12:56

Citation
La première commande indique :
Citation
Un(e) « / » ne peut pas se trouver ici.

Etrange, je ne vois pas trop quel / ne serait pas bien placé ou ne pourrait pas être là.
Vérifie bien qu'il n'y a pas d'erreur à la saisie de la commande ou qu'il manque pas un slash ou un "double quote"
Code
do shell script "cd /Users/mba/roon-web-controller/; /usr/local/bin/node app.js"
Normalement il devrait y avoir un petit signe sous le slash en question pour indiquer de quel slash on parle.
A défaut essai de poster une vu d'écran de l'éditeur Applescript avec la commande et le message d'erreur.

Pour la deuxième c'est j'ai été un peu vite (la faim sans doute) et oublié d'ajouter le do shell script et les doubles quote autour de la commande.
La commande entière doit donc être:
Code
do shell script "/usr/local/bin/node /Users/mba/roon-web-controller/app.js"

Écrit par : gigatoaster 23 Aug 2018, 13:17

Il doit y avoir quelque chose de cassé dans le script car même en mode "manuel", j'ai cette erreur :

Code
Last login: Thu Aug 23 18:17:08 on ttys000
MBA:~ mba$ node app.js
module.js:549
    throw err;
    ^

Error: Cannot find module '/Users/mba/app.js'
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Function.Module.runMain (module.js:693:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:612:3
MBA:~ mba$ cd roon-web-controller/
MBA:roon-web-controller mba$ node app.js
Working directory: /Users/mba/roon-web-controller
events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8080
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at Server.setupListenHandle [as _listen2] (net.js:1355:14)
    at listenInCluster (net.js:1396:12)
    at Server.listen (net.js:1480:7)
    at Object.<anonymous> (/Users/mba/roon-web-controller/app.js:80:8)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
MBA:roon-web-controller mba$

Écrit par : teddy7545 23 Aug 2018, 13:26

EADDRINUSE --> A priori tu cherches (enfin ton app.js) à utiliser un port qui est déjà utilisé.
Ferme peut être la session et rouvres là ou alors redémarre l'ordi pour tester.

Toujours pas compris pourquoi ta première commande ne fonctionne pas.
Dans la deuxième, peut être avais dû pensé à ajouter le Do Shell Script car elle semble avoir bien lancé node même si ensuite il y a eu une erreur. (port déjà occupé)

Écrit par : gigatoaster 24 Aug 2018, 04:55

Code
do shell script "/usr/local/bin/node /Users/mba/roon-web-controller/app.js"


Ca fonctionne!!! Trop content, merci beaucoup pour ton aide et ta patience! cool.gif

Écrit par : teddy7545 24 Aug 2018, 07:05

Excellente nouvelle ...merci pour ton retour

Peux tu tout de même préciser qu'indique ta ligne "Working directory:" lors du lancement (dans l'éditeur Applescript).
Lorsque tu le lance en manuel, j'ai vu que tu obtenais la ligne "Working directory: /Users/mba/roon-web-controller"

A priori le shell utilisé par Applescript se lance dans le répertoire racine du disque "/"
Comme on ne fait pas de cd, je ne sais donc pas comment il va intégrer le working directory (là ou il se trouve au lancement ou alors là ou il va trouver le app.js --> ça dépend surement du programme)
Vérifie donc également qu'il n'y a pas des fichiers nouveaux qui apparaissent à la racine de ton disque (en rapport avec ton application).
Pour vérifier si ce n'est pas non plus des fichiers cachés tu peux faire dans le Terminal :

Code
ls -al /

Tous les fichiers devraient être en principe root à ce niveau (s'il y en a d'autres ça pourrait être un signe)

C'est la raison pourquoi je préférais te guider vers le premier script qu'on a pas réussi à faire fonctionner (mais je comprend toujours pas la raison --> le cd avant devrait aussi fonctionner normalement)

Écrit par : gigatoaster 24 Aug 2018, 08:57

Voici :

Code
Last login: Fri Aug 24 11:52:43 on ttys000
MBA:~ mba$ ls -al /
total 69
drwxr-xr-x   30 root  wheel   1088 20 aoû 00:37 .
drwxr-xr-x   30 root  wheel   1088 20 aoû 00:37 ..
-rw-rw-r--    1 root  admin  10244 21 aoû 21:38 .DS_Store
d--x--x--x    8 root  wheel    272 24 aoû 11:37 .DocumentRevisions-V100
drwxr-xr-x@   2 root  wheel     68 21 aoû 22:18 .PKInstallSandboxManager-SystemSoftware
drwx------    5 root  wheel    170 16 aoû 17:40 .Spotlight-V100
----------    1 root  admin      0 21 fév  2017 .file
drwx------  128 root  wheel   4352 23 aoû 22:10 .fseventsd
drwxr-xr-x@   2 root  wheel     68 21 fév  2017 .vol
drwxrwxr-x+  42 root  admin   1428 21 aoû 17:41 Applications
drwxr-xr-x+  59 root  wheel   2006 21 aoû 22:18 Library
drwxr-xr-x@   2 root  wheel     68 21 fév  2017 Network
drwxr-xr-x@   4 root  wheel    136 20 aoû 00:40 System
drwxr-xr-x    5 root  admin    170 16 aoû 17:42 Users
drwxr-xr-x@   4 root  wheel    136 24 aoû 11:37 Volumes
drwxr-xr-x@  38 root  wheel   1292 20 aoû 00:40 bin
drwxrwxr-t@   2 root  admin     68 21 fév  2017 cores
dr-xr-xr-x    3 root  wheel   4224 24 aoû 11:37 dev
lrwxr-xr-x@   1 root  wheel     11 16 aoû 17:34 etc -> private/etc
dr-xr-xr-x    2 root  wheel      1 24 aoû 11:42 home
-rw-r--r--@   1 root  wheel    313 22 déc  2016 installer.failurerequests
dr-xr-xr-x    2 root  wheel      1 24 aoû 11:42 net
drwxr-xr-x@   6 root  wheel    204 16 aoû 17:36 private
drwxr-xr-x@  63 root  wheel   2142 20 aoû 00:40 sbin
lrwxr-xr-x@   1 root  wheel     11 16 aoû 17:34 tmp -> private/tmp
drwxr-xr-x@  10 root  wheel    340 21 aoû 22:18 usr
lrwxr-xr-x@   1 root  wheel     11 16 aoû 17:35 var -> private/var
drwxr-xr-x    3 root  wheel    102 16 aoû 17:35 vm
MBA:~ mba$


Est-ce normal d'avoir des dates antérieures à Août alors que j'ai reformaté et ré-installé le Mac ce mois-ci?

Écrit par : teddy7545 24 Aug 2018, 09:15

Oui à priori pas de soucis (probablement des dates reportées des répertoires copiés depuis l'installeur)
Chez moi j'ai aussi des dates antérieures à mon installation.

A priori pas de fichier curieux .. peut être bon signe.
As tu regardé ce que donne l'information working directory ?

Écrit par : gigatoaster 26 Aug 2018, 04:40

Le résultat de

Code
"Working directory:"


est

Code
"Working directory:"


dans l'éditeur de Script.

Sinon à chaque fois que je lance le script j'ai dans le moniteur d'activité "ne réponds pas" mais ça fonctionne tout de même :


Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)