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?

DuckDucking
quelle
warum Sie nicht einfach verwendencat bodyText.txt | uuencode backup.tar| mail -s "backup" [email protected]
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" [email protected]schon 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
Olivier Dulac
quelle
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.

Tim B.
quelle
-1

Meinst du:

uuencode backup.tar < bodyText.txt | mail -s "backup" myEmail@myserver.com
Viel Glück
quelle
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
Ilya Kharlamov
quelle