Antworten:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/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
Sie können die Ausgabe eines Befehls in eine Datei umleiten:
$ cat file > copy_file
oder anhängen
$ cat file >> copy_file
Wenn Sie direkt schreiben möchten, lautet der Befehl echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(dank Lukaserats Kommentar oben)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
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.
#!/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 cat
die 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-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.
Ich mag diese Antwort:
cat > FILE.txt <<EOF
info code info
...
EOF
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 ist
So was:
cat >> FILE.txt <<EOF
info code info
...
EOF
Verschieben meines Kommentars als Antwort, wie von @lycono angefordert
Wenn Sie dies mit Root-Rechten tun müssen, gehen Sie folgendermaßen vor:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
, nur tee
als root auszuführen .
Für Umgebungen , in denen hier Dokumente nicht verfügbar sind ( Makefile
, Dockerfile
usw.) Sie häufig verwenden , können printf
fü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
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:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
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.
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 umleitencat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Kann hier auch document und vi verwenden, generiert das folgende Skript eine FILE.txt mit 3 Zeilen und variabler Interpolation
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
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.
#This is my var in text file
var = Test
#Thats end of text file