Wie kann ich mit Shell-Skripten unter Linux automatisch Daten in eine Textdatei schreiben?
Ich konnte die Datei öffnen. Ich weiß jedoch nicht, wie ich Daten darauf schreiben soll.
echo "some data for the file" >> fileName
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2
text3
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
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
Ich weiß, dass dies eine verdammt alte Frage ist, aber da es sich beim OP um Scripting handelt und Google mich hierher gebracht hat, sollte auch erwähnt werden, dass Dateideskriptoren gleichzeitig zum Lesen und Schreiben geöffnet 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 poem.txt zum Lesen und Schreiben in Dateideskriptor 3 geöffnet ist. Außerdem zeigt es, dass * nix-Felder mehr FDS kennen als nur stdin, stdout und stderr (fd 0,1,2). Es hält tatsächlich viel. Normalerweise ist die maximale Anzahl von Dateideskriptoren, die der Kernel zuweisen kann, in /proc/sys/file-max
oder /proc/sys/fs/file-max
zu finden, aber die Verwendung von fd über 9 ist gefährlich, da dies zu Konflikten mit den von der Shell intern verwendeten fd führen kann. Also nicht stören und nur fd's 0-9 benutzen. Wenn Sie mehr als 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 cat >> FILE.txt << EOF
vorschlagen, wenn Sie nur etwas an das Ende der Datei anfügen möchten, ohne dabei 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'
In Umgebungen, in denen Dokumente hier nicht verfügbar sind (Makefile
, Dockerfile
usw.), können Sie printf
häufig für eine einigermaßen lesbare und effiziente Lösung verwenden.
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
Kann hier auch document und vi verwenden, das unten stehende Skript erzeugt 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" startet den vi-Einfügemodus und schließt die Datei auf ähnliche Weise mit Esc und ZZ.
#This is my var in text file
var = Test
#Thats end of text file