Wie übergebe ich eine STRG-D an eine Befehlszeile innerhalb eines Skripts?


7

Ich benutze diese Leitung

 ( cat bodyText.txt; uuencode backup.tar ) | mail -s "backup" myEmail@myserver.com

in einem Bash-Skript, das von Cron ausgelöst wird.

Diese Linie ist fast perfekt, aber es hängt warten Ctrl- Deingegeben werden, so dass die Nachricht und die attachement gesendet werden können.

Wie füge ich ein Ctrl- Din ein Bash-Skript ein, damit diese Zeile funktioniert?


warum Sie nicht einfach verwendencat bodyText.txt | uuencode backup.tar| mail -s "backup" myEmail@myserver.com
Rahul Patil

weil dies zwei E-Mails erzeugt, eine mit dem Text und die andere mit dem Teer.
DuckDucking

Hast du es ( cat bodyText.txt; uuencode backup.tar ; echo -e "\n.\n" ) | mail -s "backup" myEmail@myserver.comschon versucht ?
ott--

@ DigitalRobot hast du das versucht? weil ich nur eine Mail
erhalte

Diese \ n \ n Methode funktioniert nicht. Es wird ein Steuerelement D erwartet. Senden \ n bewirkt nichts.
DuckDucking

Antworten:


4
  • Der Uuencode lautet: Uuencode-Name <Quelldatei

  • Vielleicht brauchen Sie nur eine letzte leere Zeile: Fügen Sie ; echo -e "\n\n" ;vor der schließenden Klammer hinzu und versuchen Sie es erneut? -

Also in deinem Fall:

( cat bodyText.txt; uuencode backup.tar < backup.tar ; echo -e "\n\n" ; ) | mail -s "backup" myEmail@myserver.com

Eine andere Möglichkeit besteht darin, muttAnhänge besser zu handhaben und sich mit MIME-Typen usw. vertraut zu machen:

mutt -s "the subject" -a backup.tar -- myEmail@myserver.com < bodyText.txt

Das Echo ist wahrscheinlich nicht nötig ... Ich kann es hier nicht versuchen, also versuchen Sie es und versuchen Sie es ohne und sehen Sie, was funktioniert ^^
Olivier Dulac

Ich arbeite nicht für mich. Gleiches Problem.
DuckDucking

versuchen Sie: uuencode backup.tar backup.tar für den uuencode Teil
Olivier Dulac

Sie können einen Alias ​​haben? Bei Ihrem Kommentar zur Antwort von @goodluck unten sieht es so aus, als ob Ihr "Uuencode etwas" die Datei "etwas" uuencodiert. siehe type -all uuencodein Bash und wenn es ein Alias ​​ist, versuchen Sie \uuencode backup.tar backup.tar(mit "\", den Alias ​​zu umgehen)
Olivier Dulac

Ich habe meine Antwort aktualisiert: Probieren Sie die neue Syntax aus. Und probieren Sie auch die muttAlternative.
Olivier Dulac

0

Wie andere bereits gesagt haben, weisen Sie die Shell mit Control-D an, das Dateiende zu senden. Prozesse, die aus Streams lesen, sollten das Ende der Datei erhalten, wenn der Stream geschlossen wird.

Es scheint jedoch, dass Sie versuchen, etwas zu implementieren, das bereits in vollständigerer Form vorhanden ist. Sie könnten natürlich Gründe dafür haben, aber wenn Sie an vorhandenen Lösungen interessiert sind, sind mpack / munpack Befehlszeilenprogramme, die Dateien mimen, codieren und per E-Mail senden. Sie können die Manpage lesen, um zu sehen, ob sie das tut, was Sie wollen.


-1

Meinst du:

uuencode backup.tar < bodyText.txt | mail -s "backup" myEmail@myserver.com

Ich arbeite nicht für mich. Der Anhang kommt ohne den Körpertext an ....
DuckDucking

1
Ihr Code zu uuencodemacht keinen Sinn, und das Ändern dieses Teils würde bei dem Problem mailauf keinen Fall helfen . Sie sollten Antworten schreiben, die das Problem erklären, und nicht nur eine Codezeile ausgeben. Dies wäre für die Leser nützlicher und würde Ihnen helfen, herauszufinden, ob das, was Sie vorschlagen, eine Chance hat, das Problem zu lösen.
Gilles 'SO - hör auf böse zu sein'

-1

Verwenden Sie den ausführlichen Modus (-v), um Strg + d zu vermeiden

echo -e 'Mail body'| mail -v -s 'Mail Subject' my@email.com
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.