Ich habe etwas ähnliches wie dies in einem PHP-Skript:Shell heredoc innerhalb php heredoc
<?php
...
function log() {
// saving the log into a file.
exec(<<<BASH
cat >> $logFile <<EOF
$log
EOF
BASH
);
}
...
Wie Sie sehen können, die beiden Heredocs (BASH ist PHP und EOF ist Shell) Ende, wie man denken würde, richtig ist, aber wenn ich lese, erstellt das Protokoll das Protokoll so etwas wie dieses hat:
...
my logged string of an important event
EOF
my logged string of another important event
EOF
...
und ich überprüfen sie die apache-Log und es hat die folgenden Einträge:
sh: line 1: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')
Was mache ich falsch?
Bitte beachten Sie, dass es viele andere Implementierungen gibt, z. B. die Verwendung von PHP-Funktionen oder die Verwendung von Anführungszeichen anstelle von Heredocs. Aber ich bin neugierig, warum das in diesem speziellen Fall nicht funktioniert.
BEARBEITEN. Ich klärte den Code, so dass es klarer ist, dass ich über php running Shell-Befehle spreche.
'<<< BASH' ist eine Here-String und kein' Here-Doc'. 'Here-String' benötigt kein Trennzeichen, um sein Ende zu markieren. – sjsam