Ich habe das folgende Muster verwendet, um mehrzeilige Nachrichten in einem Bash-Skript an das Terminal zu drucken.
read -d '' message <<- EOF
this is a
mulitline
message
EOF
echo "$message"
Das hat funktioniert - bis vor ein paar Tagen hat das Muster einfach aufgehört zu funktionieren. Mit aufgehört zu arbeiten meine ich, als bash auf diese Heredoc-Ausdrücke im Skript stieß - es scheint einfach nichts zu tun - keine Ausgabe.
Das einzige, was ich mir vorstellen kann, was sich in den letzten Tagen geändert hat, ist, dass die Umgebung, in der die Skripte ausgeführt werden, ein Ubuntu 14.04 Live-USB ist, im Gegensatz zu "vollständigen" Installationen.
Dann stellte ich fest, dass der Heredoc beim Verschieben vor der Skriptanweisung set -o errexit
wieder funktioniert. dh das funktioniert nicht
#!/bin/bash
set -o errexit
read -d '' message <<- EOF
this is a
mulitline
message
EOF
echo "$message"
Ergebnis: (nichts)
Aber das funktioniert
#!/bin/bash
read -d '' message <<- EOF
this is a
mulitline
message
EOF
echo "$message"
Ergebnis
$ sudo ./script.sh
this is a
mulitline
message
- bash --version -
GNU bash, version 4.3.11(1)-release (i686-pc-linux-gnu)
\0
keine leere Zeichenfolge.