Pipe string mit newline-Befehl in der bash?
Ich versuche mich zu übergeben, in einen string einen Zeilenumbruch an ein PHP-script über die BASH.
#!/bin/bash
REPOS="$1"
REV="$2"
message=$(svnlook log $REPOS -r $REV)
changed=$(svnlook changed $REPOS -r $REV)
/usr/bin/php -q /home/chad/www/mantis.localhost/scripts/checkin.php <<< "${message}\n${changed}"
Wenn ich dies mache, sehe ich das literal "\n" anstatt entgangen newline:
blah blah issue 0000002.\nU app/controllers/application_controller.rb
Irgendwelche Ideen, wie das zu übersetzen '\n' ein literal newline?
Übrigens: was bedeutet <<< in der bash? Ich weiß, < übergibt in einer Datei...
InformationsquelleAutor Chad Johnson | 2010-08-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen
wo -e ermöglicht die interpretation von backslash-escapes (nach
man echo
)Beachten Sie, dass dies auch interpretieren backslash-escapes, die Sie möglicherweise in
${message}
und in${changed}
.Aus der bash-manual:
Hier Strings
Variante von hier-Dokumenten, das format ist:
Das Wort ist ausgebaut und geliefert, um den Befehl auf seine standard-Eingabe.
Also ich würde sagen,
entspricht
ja, du hast Recht, ich dachte-e aber die Eingabe... ich werde dies korrigieren.
the_cmd <<< word
ist nicht ganz entsprichtecho word | the_cmd
:<<<
scheint in der Lage, sich mit mehr Saiten.InformationsquelleAutor
Den
<<<
wird als ein "hier " string". Es ist eine Online-version der "here doc", ist es nicht erforderlich ein Trennzeichen, wie "EOF". Dies ist ein hier-Dokument-version:InformationsquelleAutor
um zu vermeiden, dass die interpretation der möglichen escape-Sequenzen in
${message}
und${changed}
versuchen die Verkettung der strings in einer subshell (ein Zeilenumbruch angefügt wird nach jedemecho
es sei denn, Sie geben den-n
option):Den Klammern führen Sie die Befehle in einer subshell (wenn keine Klammern angegeben, werden nur die Ausgabe des zweiten echo-würde gepumpt werden, in Ihre php-Programm).
echo -e
InformationsquelleAutor