Das Problem ist nicht mit dem Befehl echo
, es ist mit csh die Handhabung von Backticks. Wenn Sie
set var = `cat myFile`
die Zeilenumbrüche aus myfile
auszuführen sind nie in $var
gespeichert; Sie werden in Leerzeichen konvertiert. Ich kann mir keine Möglichkeit vorstellen, eine csh-Variable zu zwingen, Zeilenumbrüche aus einer Datei zu übernehmen, obwohl es eine Möglichkeit gibt, dies zu tun.
sh und seine Derivate verhalten sich so, wie Sie es möchten. Beispiel:
$ x="`printf 'foo\nbar'`"
$ echo $x
foo bar
$ echo "$x"
foo
bar
$
Die doppelten Anführungszeichen in der Zuweisung bewirken, dass die Zeilenumbrüche (mit Ausnahme des letzten) beibehalten werden. echo $x
ersetzt die Zeilenumbrüche durch Leerzeichen, aber echo "$x"
bewahrt sie.
Ihre beste Wette ist, etwas anderes zu tun, als zu versuchen, den Inhalt einer Datei in einer Variablen zu speichern. Sie haben in einem Kommentar gesagt, dass Sie versuchen, eine E-Mail mit dem Inhalt einer Protokolldatei zu senden. Füttern Sie den Inhalt der Datei also direkt mit dem von Ihnen verwendeten Mail-Befehl. Ich habe nicht alle Details, aber es könnte in etwa so aussehen:
(echo this ; echo that ; echo the-other ; cat myFile) | some-mail-command
obligatorische Referenz: http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/
Versuchen Sie, Anführungszeichen hinzuzufügen, wenn Sie value zu var erfassen, d. H. 'Set var =" \ 'cat myFile \' "'. Viel Glück. – shellter
Haben Sie Zugriff auf '/ bin/echo'? – cnicutar
@shelter - Hatte es schon einmal versucht, hilft nicht. – WhyGeeEx