1 votos

Módulo de nodo no funciona como se pretende con automator shell script

Estoy intentando iniciar un servidor en vivo a petición en cualquier carpeta temporalmente con automator, y matarlo cuando haya terminado.

El servidor Live es un paquete de nodos. Lo he instalado globalmente. En terminal, si voy a cualquier carpeta y ejecutar; live-server --port=XXXX inicia el servidor en vivo para esa carpeta. Pero no he podido ejecutarlo con automator.

He probado varias cosas;

Automator > Quickaction

Shell script Este no devuelve ningún error, pero nada parece ejecutarse.

#!/bin/bash
~/.zprofile live-server --port=5010 --open=$1
osascript -e 'set alertResult to display alert "Live Server running on \n'$1'\n PID: '$$'" buttons {"STOP"} as warning
if button returned of result = "STOP" then
        do shell script "kill -9 '$$'
end if'

AppleScript Si lo ejecuto sin watch parámetro funciona, pero está mirando ~/ si añado watch= no funciona en absoluto (carpeta no encontrada)

on run {input, parameters}
    set folderPath to (the POSIX path of input)
    tell application "Terminal"
        do script ("live-server --port=5010 --open=" & folderPath as string) & " --watch=" & folderPath as string
        activate
    end tell

    return input
end run

Shell script Así que he decidido hacer un bash script. Contenido del automatizador;

source ~/.zprofile
~/.nvm/versions/node/v16.19.0/bin/launcher.sh $1

Aquí está el contenido de bash script. Esto funciona pero esta vez live-server devuelve 404 (Creo que se trata de permisos esta vez)

#!/bin/zsh

source ~/.zprofile
cd ~/.nvm/versions/node/v16.19.0/lib/node_modules/live-server
~/.nvm/versions/node/v16.19.0/bin/node live-server.js --port=5010 --open=${1}/

¿Puede alguien explicar qué está fallando?

0voto

AmeliaBR Puntos 348

He resuelto el problema. Era un problema de parámetros. Para lanzar un WebServer con el menú contextual de Servicios;

A través de Shell Script ;

cd ~/.nvm/versions/node/v16.19.0/lib/node_modules/live-server
~/.nvm/versions/node/v16.19.0/bin/node live-server.js --port=5010 ${1}

A través de AppleScript

on run {input, parameters}
    set folderPath to (the POSIX path of input)
    tell application "Terminal"
        do script ("live-server --port=5010 " & folderPath as string) & " --watch=" & folderPath as string
        activate
    end tell

    return input
end run

Información ; Aunque ambos códigos son válidos, funcionan de forma diferente. El primero funciona en segundo plano y crea un icono en la barra de menús mientras se ejecuta, pero si hago clic en el icono de cerrar (cancelar) sigue ejecutándose. Para detenerlo tengo que abrir una ventana de terminal y ejecutar algo como kill -9 $(lsof -ti:5010) (no es una buena experiencia.)

El segundo, abre una ventana de terminal, que no es agradable, pero si lo mato el servidor se detiene.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X