Wie erstelle ich einen Befehl, um mir eine SMS mitzuteilen, ob er fehlgeschlagen ist oder nicht

543
Veridian

Ich versuche, einen Befehl zu erstellen, der mir eine Textnachricht sendet, unabhängig davon, ob er bestanden wurde oder nicht.

Bisher sieht mein Befehl so aus:

command && echo OK || echo Failed | echo ' 'at `date | sendmail 5556667777@vtext.com 

Wenn der Text bestanden wird, möchte ich, dass er mir einen Text sendet (indem er mir eine E-Mail sendet) und der Text sollte wie folgt lauten:

OK, am 2. März um 14:37 Uhr

und wenn der Test fehlschlägt, sollte er mir folgendes schreiben:

Fehlgeschlagen am 2. März 14:37 Uhr.

Ich bin mir nicht sicher, wie ich die echoAusgänge richtig verketten soll, und ich hoffe, dass jemand weiß, wo mein Problem liegt. Die Schale ist tcsh.

BEARBEITEN:

Für so etwas wie 'ls' möchte ich, dass die Verzeichnisse im Terminal aufgelistet sind, aber ich möchte, dass 'Ok' oder 'Fail' zum 'sendmail'-Teil geht. Daher sollten alle Befehle wie üblich auf das Terminal gedruckt werden, aber das' fehlgeschlagener 'oder' ok'-Teil zum sendmail-Teil.

0
@ KamilMaciorowski, ich habe "illegalen Variablennamen" erhalten. Ich versuche dies auf der Kommandozeile übrigens. TCSH-Schale. Veridian vor 7 Jahren 0

1 Antwort auf die Frage

0
Kamil Maciorowski

Kommentar des OP:

Für so etwas möchte lsich die Verzeichnisse im Terminal aufgelistet, aber ich möchte das "Ok" oder "Fail" zum sendmailTeil gehen.

Ich kann das nicht in tcsh. Das sollte funktionieren in bash:

your_command ; { [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at `date`" ; } | … 

Ich hoffe, jemand wird es von hier aus nehmen, die obige Zeile portieren tcshund eine bessere Antwort schreiben.

Das Beste, was ich mir vorstellen kann, ist ein bashSkript, wenn Sie nur bashauf der Maschine haben. Der Punkt ist, dass Sie ein solches Skript ausführen können tcsh. Dies ist ein schnelles und schmutziges Skript:

#!/bin/bash "$@" { [ $? -eq 0 ] && echo -n OK || echo -n Failed ; echo " at `date`" ; } | sendmail 5556667777@vtext.com 

Ändern Sie den Shebang, wenn Sie müssen. Speichern Sie diesen Code in eine Datei (zB sendstatus.sh), machen Sie ihn ausführbar chmodund verwenden Sie ihn wie folgt:

./sendstatus.sh your_command ./sendstatus.sh your_command --with option -s ./sendstatus.sh ls ./sendstatus.sh ls -sl 

Die Korrekturen:

  • echo -nbewirkt, dass der nächste echoin derselben Zeile fortgesetzt wird;
  • das letzte echoliest nicht aus der Pfeife, weil es keinen Sinn hatte;
  • date ist in `Markierungen (Befehlssubstitution);
  • Befehle werden nach {}Trennzeichen gruppiert, sodass ihre Ausgabe |insgesamt an das letzte Element übergeben wird.
Ich bekomme: {: Befehl nicht gefunden. Veridian vor 7 Jahren 0
Sorry, das hat auch nicht funktioniert. Wenn er durchläuft, gibt er auch die Ausgabe des Befehls weiter. Ich möchte nur den Teil "ok at date" oder "failed at date" Veridian vor 7 Jahren 0
@Veridian Wie wäre es jetzt? Kamil Maciorowski vor 7 Jahren 0
Ich habe es noch nicht geprüft, aber wenn man es betrachtet, sieht es so aus, als ob die gesamte Ausgabe des Befehls unterdrückt wird. Für so etwas wie 'ls' möchte ich, dass die Verzeichnisse im Terminal aufgelistet sind, aber ich möchte, dass 'Ok' oder 'Fail' zum 'sendmail'-Teil geht. Veridian vor 7 Jahren 0
@Veridian gebe ich auf. Siehe meine endgültige Antwort. Sie sollten Ihre Frage bearbeiten und alle Ihre Wünsche dort platzieren (erwarten Sie nicht, dass die Benutzer alle Kommentare lesen; die Frage sollte selbsterklärend sein). Viel Glück. Kamil Maciorowski vor 7 Jahren 0
@Veridian Ehrlich gesagt glaube ich nicht, dass die Frage (noch) eine Aufforderung verdient. Es schien, dass das Problem darin bestand, "die Echoausgänge korrekt zu verketten". Meine Antwort (frühere Version, die auf `tcsh` abzielt) hat dieses Problem bereits gelöst. Außerdem wurde die Befehlssubstitutionssyntax korrigiert. Dann haben Sie sich auf die erste Befehlsausgabe konzentriert. Ich denke, hier sollten mindestens zwei getrennte Fragen sein: diese Frage über 'echo'-Ausgaben, die zweite über die erste Befehlsausgabe. Wenn Sie alles hier behalten möchten, sollten Sie die Frage verbessern, wie ich Ihnen gesagt habe. Ich erwarte meine Zustimmung, wenn ich meinen Rat nicht irgendwie unhöflich befolge. Kamil Maciorowski vor 7 Jahren 0
@Veridian Noch etwas zu "zusätzlicher Belichtung": Ihre Bearbeitung wird die Frage an den Anfang der Hauptseite stellen. Kamil Maciorowski vor 7 Jahren 0
Unglücklicherweise haben Sie es so interpretiert. Ich habe die Gleichung geändert. Veridian vor 7 Jahren 0
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/56319/discussion-between-kamil-maciorowski-and-veridian). Kamil Maciorowski vor 7 Jahren 0