Pushover-Shell-Skript zum Senden der Ergebnisse der Befehlszeilenausgabe an Pushover.app

Pushover-Shell-Skript zum Senden der Ergebnisse der Befehlszeilenausgabe an Pushover.app

Ich versuche, ein Pushover-Shell-Skript zu erstellen/bearbeiten, das von jedem Skript oder Befehl aufgerufen werden kann, und die Ausgabe des Skripts oder Befehls an mein Pushover-Konto zu senden. Befolgen Sie die Anweisungen auf dieserSeite.

Ich habe das folgende Shell-Skript eingefügt /usr/local/binund mein App-Token und meine Benutzer-Token hinzugefügt.

Ich erhalte keine Pushover-Benachrichtigungen oder Fehler, nachdem ich diesen Befehl verwendet habe:

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

Inhalt des Shell-Skripts BEARBEITET nach 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
}

Ich gehe davon aus, dass der Konflikt in der ersten Zeile liegt, möglicherweise im Zitat, aber nachdem ich ein paar verschiedene Variationen ausprobiert habe, hatte ich keinen Erfolg.

Ein Beispiel dafür, was nach dem Versuch, das obige Shell-Skript zu debuggen, funktioniert. Offensichtlich soll dies nur beweisen, dass meine Pushover-Einstellungen alle in Ordnung sind. Dadurch wird das Problem auf die Funktion im Skript eingegrenzt.

#!/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

Antwort1

Sie haben Recht, dass die erste Zeile der Funktion problematisch ist. Sie müssen die Shell-Befehle durch Zeilenumbrüche oder Semikolons trennen. Wenn Sie stderr nicht umleiten würden, würden Sie etwas wie Folgendes sehen:bash: local: `[[': not a valid identifier

Versuche dies:

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
}

Zur einfacheren Wartung würde ich jedoch ein Array für die Curl-Optionen verwenden.

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
}

Demonstration der Fehlermeldung:

$ 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

verwandte Informationen