Dies ist mein Bash-Skript.
#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF
es liest einfach /etc/httpd/conf/httpd.conf und schreibt es in /a.txt. Das Problem besteht darin, dass dies über Webskripte mit dem Befehl sudo ausgeführt wird. Aus irgendeinem Grund wird nicht alles in die Datei a.txt geschrieben.
aber bei Ausführung über die Kommandozeile wird alles problemlos in eine .txt-Datei geschrieben.
also sollte ich dies vielleicht an einen Hintergrundprozess senden, indem ich hinzufüge:
> /dev/null 2>&1
dazu. aber wie kann das gemacht werden? ich habe es versucht
#!/bin/bash
oo="`cat /etc/httpd/conf/httpd.conf`";
cat > /a.txt << EOF
$oo
EOF > /dev/null 2>&1
das hat nicht funktioniert.
Antwort1
Vielleicht ist dieses Beispiel einfach nur extrem vereinfacht, aber ich verstehe nicht, warum Sie nicht einfach Folgendes ausführen würden:
cp /etc/httpd/conf/httpd.conf /a.txt
Das heißt, es gibt bereits einen Befehl, der einfach aus einer Datei liest und eine andere mit deren Inhalt erstellt, und dieser heißt cp
. Der einzige wirkliche Unterschied wäre, wenn /a.txt
bereits vorhanden wäre und Sie versuchen würden, seine Berechtigungen oder etwas Ähnliches beizubehalten – aber selbst dann würden Sie einfach Folgendes tun wollen:
cat /etc/httpd/conf/httpd.conf >/a.txt
Antwort2
Um einen Befehl mit einem HERE-DOC im Hintergrund auszuführen, geben Sie &
in der ersten Zeile Folgendes an:
command << EOF &
blah blah
EOF
In diesem speziellen Fall verstehe ich nicht, was der Sinn ist. Sie leiten stdout bereits nach a.txt um. Warum möchten Sie es gleichzeitig nach /dev/null umleiten?
Antwort3
Ich denke, Sie sollten Folgendes tun:
cat </etc/httpd/conf/httpd.conf >/a.txt
So sehr ich es auch versuche, ich kann nicht erkennen, dass der Code in Ihrer Frage irgendeine andere Wirkung haben sollte.
Wenn du:
cat <file
...oder...
cat <<FILE
$(shell generated file contents)
FILE
Sie kopieren einfach cat
den Standard-Eingang von in seinen Standard-Ausgang. In diesem Szenario gilt also:
<<FILE
`cat <file`
FILE
<<FILE
und <file
sind identisch.