Zum Inhalt springen

Verständnisfrage bei C-Shell programmierung


SimonLZ

Empfohlene Beiträge

Hallo zusammen,

Ich habe folgendes "Entdeckung" gemacht,

und zwar versende ich aus einem cshell script heraus eine email.

Rufe ich das kommando mit "Befehls-Substitution" auf

`cat tempfile |/usr/bin/mailx -r xxx@yyye.de -s "TEST" test@xyz.com`
dann wird die Email 2mal versendet. und der Output mit #!/bin/csh/ ergbit:


`cat tempfile |/usr/bin/mailx -r xxx@yyye.de -s "TEST" test@xyz.com`

cat tempfile |/usr/bin/mailx -r xxx@yyye.de -s "TEST" test@xyz.com

cat tempfile |/usr/bin/mailx -r xxx@yyye.de -s "TEST" test@xyz.com


rufe ich es ohne `` auf, dann wird nur eine email versendet.

Kann mir das einer erklären?

Ich finde leider auch keine gute Erklärung was die `` so wirklich zu bedeuten ahben. Ich rufe alle externen Aufrufe damit auf :-/

Danke schonmal!!

Simon

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

was steht denn in der Man-Page von csh dazu?

Von Backticks umgebene Kommandos werden in einer Subshell ausgeführt.

Um mehrerlei Probleme zu umgehen und die Übersichtlichkeit zu Wahren,

verwende ich keine Backticks in der Shell (also Bash - ich arbeit nicht mit der csh),

stattdessen mache ich das so:

x="$(pwd)"; echo $x

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deine vorgeschlagene Syntax geht in der csh leider nicht :-/

das mit den Backticks habe ich jetzt einigermaßen verstanden.

Allerdings noch nicht wirklich, was mir das bringt, dass die Befehle in einer Subshell ausgeführt werden, bzw. WARUM die Email 2x versendet wird, wenn ich den Befehl in einer Subshell ausführen lasse.

Wäre klasse wenn du mir da nochmals auf die Sprünge helfen könntest. :byby:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Backticks haben einen anderen Zweck. Das Kommando zwischen den Backticks wird ausgeführt und die Ausgabe desselben vom Script verwendet.


#!/usr/bin/csh

ls -1 /net/`hostname`/
Der obige code führt einerseits "hostname" aus, fügt die Ausgabe dann aber in den ls-Befehl ein. Heisst der Host also z.b. "birne", wird ein ls -1 /net/birne/ ausgeführt. Dein `cat foo | bla` führt also nicht nur eben dies aus, sondern auch noch das was das kommando als Ausgabe rauswirft. Das solltest du dir vielleicht mal angucken. Obwohl mailx eigentlich keine Ausgabe macht. Die Backticks sind also für deinen Zweck unsinnig. Das cat vor mailx erinnert mich immer an "cat datei | grep foo", tut aber natürlich. Ich empfehle

#!/usr/bin/csh

/usr/bin/mailx -r abs@dom.com -s "Betreff" empf@dom.com < tempfile

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...