Wie heißt dieser Operator? Ich würde gerne ein Handbuch dazu finden.
Vlad T.
96
Der Operator> leitet die Ausgabe in eine Datei um, die die Datei überschreibt, falls vorhanden. Das >> wird an eine vorhandene Datei angehängt.
Triton Man
4
Vielen Dank, hier ist der Link zur Wiki-Seite, falls jemand sie benötigt. En.wikipedia.org/wiki/…
Vlad T.
11
Wenn Sie dies mit Root-Rechten tun müssen, gehen Sie folgendermaßen vor:sudo sh -c 'echo "some data for the file" >> fileName'
lukaserat
1
Was passiert , wenn mein Text etwas wie ist dies und aus irgendeinem Grund kann ich nicht verwenden , curloder wget?
Asedsami
145
#!/bin/sh
FILE="/path/to/file"/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Eine Erklärung Ihres Codes würde einen großen Beitrag dazu leisten, ihn für andere benutzerfreundlicher zu machen. Selbst Vokabeln wie "Hier dokumentieren" und "Umleitung" können Suchende auf andere Ressourcen verweisen.
Palpatim
2
Für so etwas ist eine Erklärung nicht so notwendig.
Bhargav Nanekalva
6
Eine Erklärung ist niemals erforderlich, wenn Sie die Antwort bereits kennen. Für mich ist der obige Code aufgrund fehlender Details nicht hilfreich.
Ich weiß, dass dies eine verdammt alte Frage ist, aber da es im OP um Skripterstellung geht und Google mich hierher gebracht hat, sollte auch das Öffnen von Dateideskriptoren zum gleichzeitigen Lesen und Schreiben erwähnt werden.
#!/bin/bash# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red">&3
echo "Violets are blue">&3
echo "Poems are cute">&3
echo "And so are you">&3# Close fd 3
exec 3>&-
Dann catdie Datei auf dem Terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Dieses Beispiel bewirkt, dass die Datei gedicht.txt zum Lesen und Schreiben in Dateideskriptor 3 geöffnet ist. Es zeigt auch, dass * nix-Boxen mehr fd's kennen als nur stdin, stdout und stderr (fd 0,1,2). Es hält tatsächlich viel. Normalerweise befindet sich die maximale Anzahl von Dateideskriptoren, die der Kernel zuweisen kann, in /proc/sys/file-maxoder /proc/sys/fs/file-maxaber die Verwendung eines fd über 9 ist gefährlich, da dies zu Konflikten mit den von der Shell intern verwendeten fd führen kann. Also mach dir keine Sorgen und benutze nur fds 0-9. Wenn Sie mehr als die 9 Dateideskriptoren in einem Bash-Skript benötigen, sollten Sie sowieso eine andere Sprache verwenden :)
Wie auch immer, fd's können auf viele interessante Arten verwendet werden.
Möglicherweise möchten Sie vermeiden, eine Root-Shell nur zum Drucken einer Zeichenfolge auszuführen. Versuchen Sie echo "some data for the file" | sudo tee -a fileName >/dev/null, nur teeals root auszuführen .
Tripleee
6
Für Umgebungen , in denen hier Dokumente nicht verfügbar sind ( Makefile, Dockerfileusw.) Sie häufig verwenden , können printffür eine einigermaßen lesbar und effiziente Lösung.
printf '%s\n''#!/bin/sh''# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done'>outputfile
Ihr Kommentar oben Versuchen Sie, "einige Daten für die Datei" | wiederzugeben sudo tee -a Dateiname> / dev / null, um tee nur als root auszuführen. war wirklich nützlich!
Kojo
5
Ich dachte, es gäbe ein paar vollkommen gute Antworten, aber keine kurze Zusammenfassung aller Möglichkeiten; so:
Das Hauptprinzip hinter den meisten Antworten ist die Umleitung . Zwei sind wichtige Umleitungsoperatoren zum Schreiben in Dateien:
Ausgabe umleiten:
echo 'text to completely overwrite contents of myfile' > myfile
Umgeleitete Ausgabe anhängen
echo 'text to add to end of myfile' >> myfile
Hier Dokumente
Andere erwähnten, anstatt von einer festen Eingabequelle wie echo 'text', könnten Sie auch interaktiv über ein "Hier-Dokument" in Dateien schreiben, die auch im Link zum obigen Bash-Handbuch beschrieben sind. Diese Antworten, z
cat > FILE.txt <<EOF oder cat >> FILE.txt <<EOF
Verwenden Sie dieselben Umleitungsoperatoren, fügen Sie jedoch über "Hier Dokumente" eine weitere Ebene hinzu. In der obigen Syntax schreiben Sie über die Ausgabe von in die Datei FILE.txt cat. Das Schreiben erfolgt erst, nachdem der interaktiven Eingabe eine bestimmte Zeichenfolge zugewiesen wurde, in diesem Fall 'EOF'. Dies kann jedoch eine beliebige Zeichenfolge sein, z.
cat > FILE.txt <<'StopEverything' oder cat >> FILE.txt <<'StopEverything'
würde genauso gut funktionieren. Hier suchen Dokumente auch nach verschiedenen Trennzeichen und anderen interessanten Analysezeichen. Weitere Informationen hierzu finden Sie in den Dokumenten.
Hier Saiten
Ein bisschen verworren und eher eine Übung zum Verstehen der Umleitung und der Here Documents-Syntax, aber Sie können die Here Document-Stilsyntax mit Standard-Redirect-Operatoren kombinieren, um eine Here String zu werden:
Ausgabe der Katzeneingabe umleiten
cat > myfile <<<'text to completely overwrite contents of myfile'
Anhängen der umgeleiteten Ausgabe der Katzeneingabe
cat >> myfile <<<'text to completely overwrite contents of myfile'
sudo sh -c 'echo "some data for the file" >> fileName'
curl
oderwget
?quelle
Sie können die Ausgabe eines Befehls in eine Datei umleiten:
oder anhängen
Wenn Sie direkt schreiben möchten, lautet der Befehl
echo 'text'
quelle
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(dank Lukaserats Kommentar oben)quelle
cat > FILE.txt
Strg + D drücken, wenn Sie fertig sind .Ich weiß, dass dies eine verdammt alte Frage ist, aber da es im OP um Skripterstellung geht und Google mich hierher gebracht hat, sollte auch das Öffnen von Dateideskriptoren zum gleichzeitigen Lesen und Schreiben erwähnt werden.
Dann
cat
die Datei auf dem TerminalDieses Beispiel bewirkt, dass die Datei gedicht.txt zum Lesen und Schreiben in Dateideskriptor 3 geöffnet ist. Es zeigt auch, dass * nix-Boxen mehr fd's kennen als nur stdin, stdout und stderr (fd 0,1,2). Es hält tatsächlich viel. Normalerweise befindet sich die maximale Anzahl von Dateideskriptoren, die der Kernel zuweisen kann, in
/proc/sys/file-max
oder/proc/sys/fs/file-max
aber die Verwendung eines fd über 9 ist gefährlich, da dies zu Konflikten mit den von der Shell intern verwendeten fd führen kann. Also mach dir keine Sorgen und benutze nur fds 0-9. Wenn Sie mehr als die 9 Dateideskriptoren in einem Bash-Skript benötigen, sollten Sie sowieso eine andere Sprache verwenden :)Wie auch immer, fd's können auf viele interessante Arten verwendet werden.
quelle
Ich mag diese Antwort:
aber würde vorschlagen,
cat >> FILE.txt << EOF
wenn Sie nur etwas am Ende der Datei hinzufügen möchten, ohne zu löschen, was bereits vorhanden istSo was:
quelle
Verschieben meines Kommentars als Antwort, wie von @lycono angefordert
Wenn Sie dies mit Root-Rechten tun müssen, gehen Sie folgendermaßen vor:
quelle
echo "some data for the file" | sudo tee -a fileName >/dev/null
, nurtee
als root auszuführen .Für Umgebungen , in denen hier Dokumente nicht verfügbar sind (
Makefile
,Dockerfile
usw.) Sie häufig verwenden , könnenprintf
für eine einigermaßen lesbar und effiziente Lösung.quelle
Ich dachte, es gäbe ein paar vollkommen gute Antworten, aber keine kurze Zusammenfassung aller Möglichkeiten; so:
Das Hauptprinzip hinter den meisten Antworten ist die Umleitung . Zwei sind wichtige Umleitungsoperatoren zum Schreiben in Dateien:
Ausgabe umleiten:
echo 'text to completely overwrite contents of myfile' > myfile
Umgeleitete Ausgabe anhängen
echo 'text to add to end of myfile' >> myfile
Hier Dokumente
Andere erwähnten, anstatt von einer festen Eingabequelle wie
echo 'text'
, könnten Sie auch interaktiv über ein "Hier-Dokument" in Dateien schreiben, die auch im Link zum obigen Bash-Handbuch beschrieben sind. Diese Antworten, zcat > FILE.txt <<EOF
odercat >> FILE.txt <<EOF
Verwenden Sie dieselben Umleitungsoperatoren, fügen Sie jedoch über "Hier Dokumente" eine weitere Ebene hinzu. In der obigen Syntax schreiben Sie über die Ausgabe von in die Datei FILE.txt
cat
. Das Schreiben erfolgt erst, nachdem der interaktiven Eingabe eine bestimmte Zeichenfolge zugewiesen wurde, in diesem Fall 'EOF'. Dies kann jedoch eine beliebige Zeichenfolge sein, z.cat > FILE.txt <<'StopEverything'
odercat >> FILE.txt <<'StopEverything'
würde genauso gut funktionieren. Hier suchen Dokumente auch nach verschiedenen Trennzeichen und anderen interessanten Analysezeichen. Weitere Informationen hierzu finden Sie in den Dokumenten.
Hier Saiten
Ein bisschen verworren und eher eine Übung zum Verstehen der Umleitung und der Here Documents-Syntax, aber Sie können die Here Document-Stilsyntax mit Standard-Redirect-Operatoren kombinieren, um eine Here String zu werden:
Ausgabe der Katzeneingabe umleiten
Anhängen der umgeleiteten Ausgabe der Katzeneingabecat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
quelle
Kann hier auch document und vi verwenden, generiert das folgende Skript eine FILE.txt mit 3 Zeilen und variabler Interpolation
Dann hat die Datei 3 Zeilen wie unten. "i" dient zum Starten des vi-Einfügemodus und zum Schließen der Datei mit Esc und ZZ.
quelle
Das ist meine Antwort. $ cat file> copy_file
quelle