Script de shell Pushover para enviar los resultados de la salida de la línea de comando a Pushover.app

Script de shell Pushover para enviar los resultados de la salida de la línea de comando a Pushover.app

Estoy intentando crear/editar un script de shell pushover al que se pueda llamar desde cualquier script o comando, y enviar el resultado del script o comando a mi cuenta Pushover. Siguiendo las instrucciones de estepágina.

Coloqué el siguiente script de shell /usr/local/biny agregué el token de mi aplicación y los tokens de usuario.

No recibo ninguna notificación pushover ni errores después de usar este comando:

john$ ls | pushover.sh 2>&1 | tee file /Users/john/Desktop/results.txt

Contenido del script de shell EDITADO por Glenn

#!/usr/bin/env bash
         
# TOKEN INFORMATION 
_token='APPTOKEN'
_user='USERTOKEN'
         
# Bash function to push notification to registered device
push_to_mobile() {
  local t="${1:cli-app}"
  local m="$2"
  [[ -n "$m" ]] && curl -s \
    --form-string "token=${_token}" \
    --form-string "user=${_user}" \
    --form-string "title=$t" \
    --form-string "message=$m" \
    https://api.pushover.net/1/messages.json
}

Supongo que el conflicto está en la primera línea, posiblemente en las citas, pero después de probar algunas variaciones diferentes no he tenido ningún éxito.

Un ejemplo de lo que funciona después de intentar depurar el script de shell anterior. Obviamente esto es sólo para demostrar que mis ajustes fáciles están en orden. Esto reduce el problema a la función en el script.

#!/usr/bin/env bash

# TOKEN INFORMATION
_token='xxxx'
_user='yyyy'
_message='test'

# Bash function to push notification to registered device
curl -s \
  --form-string "token=${_token}" \
  --form-string "user=${_user}" \
  --form-string "message=${_message}" \
 https://api.pushover.net/1/messages.json

Respuesta1

Tienes razón en que la primera línea de la función es problemática. Debe separar los comandos del shell con nuevas líneas o punto y coma. Si no estuvieras redirigiendo stderr, verías algo comobash: local: `[[': not a valid identifier

Prueba esto:

push_to_mobile() {
  local t="${1:cli-app}"
  local m="$2"
  [[ -n "$m" ]] && curl -s \
    --form-string "token=${_token}" \
    --form-string "user=${_user}" \
    --form-string "title=$t" \
    --form-string "message=$m" \
    https://api.pushover.net/1/messages.json
}

Aunque usaría una matriz para las opciones de rizo para facilitar el mantenimiento.

push_to_mobile() {
  [[ -z "$2" ]] && return
  local curl_opts=(
    --silent
    --form-string "title=${1:-cli-app}"
    --form-string "message=$2"
    --form-string "token=${_token}"
    --form-string "user=${_user}"
  )
  curl "${curl_opts[@]}" https://api.pushover.net/1/messages.json
}

Demostrando el mensaje de error:

$ f() { local a=b local c=d [[ x == x ]] && echo hello; }
$ f
bash: local: `[[': not a valid identifier
bash: local: `==': not a valid identifier
bash: local: `]]': not a valid identifier

información relacionada