Was ist der einfachste Weg, um Text unter Linux an eine Datei anzuhängen?
Ich habe mir diese Frage angesehen , aber die akzeptierte Antwort verwendet ein zusätzliches Programm ( sed
). Ich bin sicher, es sollte einen einfacheren Weg mit echo
oder ähnlichem geben.
sudo !!
- wodurch der letzte Befehl mitsudo
vorangestelltem Befehl ausgeführt wird . Ich habe kürzlich herausgefunden, dass dies auch mitnano
etc funktioniert (indem ich versehentlich versucht habenano nano auth
...)!!
, super. So oft mache ich Sachen wiecat /var/log/apache/error.log
und bekomme die Erlaubnis verweigert. Dies kann auch mit einer ID aus dem Verlauf erfolgen, z. B.sudo !1419
wird der Befehl in der Zeile1419
im Verlauf als sudo ausgeführt.Wie wäre es mit:
Wenn Sie den
>>
Operator verwenden, werden Daten am Ende der Datei angehängt, während bei Verwendung des Operators>
der Inhalt der Datei überschrieben wird, falls dieser bereits vorhanden ist.Sie können auch
printf
auf die gleiche Weise verwenden:Beachten Sie, dass die Verwendung der oben genannten Methoden gefährlich sein kann. Wenn Sie beispielsweise bereits eine Datei haben und Daten an das Ende der Datei anhängen müssen und vergessen, die letzten hinzuzufügen, werden
>
alle Daten in der Datei zerstört. Sie können dieses Verhalten ändern, indem Sie dienoclobber
Variable in Ihrem.bashrc
:Wenn Sie dies versuchen, erhalten
echo "hello" > file.txt
Sie eine Warnungcannot overwrite existing file
.Um das Schreiben in die Datei zu erzwingen, müssen Sie jetzt die spezielle Syntax verwenden:
Sie sollten auch wissen, dass standardmäßig
echo
ein nachfolgendes Zeilenumbruchzeichen hinzugefügt wird, das mithilfe des-n
Flags unterdrückt werden kann :Verweise
echo(1) - Linux man page
noclobber variable
I/O Redirection
quelle
cat
, aber Sie sollten besser vorsichtig sein, wenn Sie>>
stattdessen verwenden>
!sudo rm -r /
sudo rm -r /
alssudo rm -rf /
! ^ _ ^ Gibt es ein Flag, das um Bestätigung bittet, bevor der Inhalt einer vorhandenen Datei mit überschrieben wird>
? Es scheint eine gute Idee zu sein, immer eine solche Flagge zu verwenden.set -o noclobber
in der.bashrc
dann können Sie die spezielle Syntax ohne eine bestehende Datei nicht überschreibenecho "hello" >| <filename>
Ein anderer möglicher Weg ist:
Das
-a
wird am Ende der Datei angehängt.Verwenden Sie bei
sudo
Bedarf:quelle
>/dev/null
am Ende verhindert, dass "Text" in Ihrer Konsole angezeigt wird.Folgen Sie der akzeptierten Antwort.
Sie benötigen etwas anderes als STRG-D, um das Ende zu bestimmen, wenn Sie dies in einem Skript verwenden . Versuchen Sie stattdessen Folgendes:
Dadurch wird Text an die angegebene Datei angehängt (ohne "EOF").
Es wird ein Here-Dokument (oder Heredoc) verwendet .
Wenn Sie jedoch sudo benötigen, um an die angegebene Datei anzuhängen, treten aufgrund der E / A-Umleitung Probleme bei der Verwendung eines Heredocs auf, wenn Sie direkt in die Befehlszeile eingeben.
Diese Variante funktioniert, wenn Sie direkt in die Befehlszeile eingeben:
Oder Sie können
tee
stattdessen verwenden, um das Kommandozeilen-Sudo-Problem zu vermeiden, das bei der Verwendung des Heredoc mit cat auftritt:quelle
cat << 'EOF' >
seit Jahren und wusste nicht, was ichcat << 'EOF' >>
anhängen sollte! Danke