Wie verzweigt man einen „cat“-Befehl?

Wie verzweigt man einen „cat“-Befehl?

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.txtbereits 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 catden Standard-Eingang von in seinen Standard-Ausgang. In diesem Szenario gilt also:

<<FILE
    `cat <file`
FILE

<<FILEund <filesind identisch.

verwandte Informationen