Kürzlich habe ich kurze Sätze zu einer tree_hole
Datei wiederholt .
Ich echo 'something' >> tree_hole
habe diesen Job gemacht.
Aber ich war immer besorgt, was , wenn ich falsch Eingabe >
statt >>
, da ich dies oft getan hat.
Also habe ich eine eigene globale Bash-Funktion in der Bash-Funktion erstellt:
function th { echo "$1" >> /Users/zen1/zen/pythonstudy/tree_hole; }
export -f th
Aber ich frage mich, ob es eine andere einfache Möglichkeit gibt, Zeilen an das Ende einer Datei anzuhängen. Weil ich das bei anderen Gelegenheiten oft benutzen muss.
Gibt es irgendwelche?
rm="rm -i"
und habe in einer anderen Umgebungrm *
auf die Bestätigungsfragen gewartet. Sie lernen gefährliche Gewohnheiten!Antworten:
Legen Sie die
noclobber
Option der Shell fest :quelle
>|
.zsh
Aktiviert dieses Verhalten standardmäßig.setopt noclobber
undsetopt clobber
. Es sieht so aus, als ob es nicht genau "Standard" ist, es hängt von den Konfigurationsdateien ab, die mit Ihrer Distribution geliefert werden.set [+-]C
jeder modernen Shellset +o noclobber
in Bash oderset +C
.Wenn Sie befürchten, dass Ihre Datei vom
>
Bediener beschädigt wird, können Sie Ihr Dateiattribut so ändern, dass es nur angehängt wird:Im ext2 / ext3 / ext4- Dateisystem:
chattr +a file.txt
Im XFS- Dateisystem:
echo chattr +a | xfs_io file.txt
Und wenn Sie eine Funktion möchten, habe ich sie bereits für mich selbst erstellt (ich habe sie in der Servicedatei zum Protokollieren von Ausgaben verwendet). Sie können sie für Ihren Zweck ändern:
quelle
$
) generell in doppelte Anführungszeichen setzen , um Globen, Worttrennung und damit verbundene Leerzeichenprobleme zu vermeiden. Die Online- ShellCheck- App kann dieses und verschiedene andere Probleme in Bash-Skripten erkennen. In einem ähnlichen Sinne"$@"
ist viel sicherer als$*
.read
Befehl mit der-r
Option aufrufen , um zu verhindern, dass Backslashes in der Eingabe das folgende Zeichen übergehen. 3) In Bash-Skripten ist es üblich, für Skriptvariablennamen Kleinbuchstaben zu verwenden, da ALL UPPER CASE für Systemvariablen verwendet wird. Wenn Sie also für Ihre eigenen Variablen Großbuchstaben verwenden, verwirren Sie Personen, die Ihren Code lesen, und Sie können versehentlich eine Systemvariable blockieren, die Sie später im Skript verwenden möchten. Wenn Sie das Skript als Quelle angeben, werden die Variablen für nachfolgende Befehle überlastet.echo
ist praktisch zum Drucken von festen Zeichenfolgen, kann jedoch unerwartete Dinge mit beliebigen Daten tun, insbesondere auf GNU-Systemen. Es ist viel sicherer zu bedienenprintf
. Weitere Informationen, insbesondere die Antwort von Stéphane Chazelas, finden Sie unter unix.stackexchange.com/questions/65803/… .Verwenden Sie
tee
mit der Option zum Anhängen:quelle
>
die-a
Option zu vergessen, wenn sie sich Sorgen machen, einen Charakter zu vergessen !Viele Programme, die Dateien zum Überschreiben öffnen können, können sie alternativ zum Anhängen öffnen, z. B. gnu dd.
Es kann stdin oder eine im
if=
Parameter add angegebene Datei lesen, um die Byteanzahl2>/dev/null
zu unterdrücken.quelle
dd
ist eine schlechte Idee.dd
nicht zuverlässig seinen Eingang mit seinem Ausgang schreiben , nicht , wenn eine von ihnen nicht eine normale Datei oder Block - Gerät istIch würde gerne eine verwenden
sed
(auch mit Sicherungskopie - siehe Erweiterung danach-i
):quelle
Sie können die Datei jederzeit auf andere Weise durchsuchen ...
... diese seltsam aussehende Sequenz druckt:
Aber das ist irgendwie albern.
Ein nützlicheres Beispiel könnte so aussehen:
Sie können es so nennen:
Und Sie würden mit einer Anzahl von
file
Zeilen enden, die geschrieben wurden,stderr
bevor die Aktion zum Anhängen stattfindet.quelle