Ich bin neu in Linux. Wenn ich mit bash eine neue Datei .gitignore unter dem aktuellen Verzeichnis erstelle, habe ich festgestellt, dass ich Folgendes tun kann:
> .gitignore
oder
touch .gitignore
Es scheint, dass sie das Gleiche tun. Wenn ich im Handbuch touch
nachschaue, wird der Zeitstempel für die aktuelle Datei geändert, es gibt jedoch kein Handbuch für >
. Kann also jemand erklären, was getan werden kann >
, und gibt es in diesem Zusammenhang einen Unterschied bei der Verwendung dieser beiden Befehle? Vielen Dank.
command-line
Steve Deng Zishi
quelle
quelle
man bash
. Es ist ein langes Dokument und es wird Tage oder sogar Wochen dauern, bis es gut verstanden ist, aber es lohnt sich, es durchzuarbeiten, wenn Sie Bash gründlich lernen möchten.Antworten:
>
ist der Shell-Umleitungsoperator. Siehe Was ist der Unterschied zwischen ">" und ">>" im Shell-Befehl? und wann sollte ich <oder <() oder << und> oder> () verwenden? Es wird hauptsächlich verwendet, um die Ausgabe eines Befehls in eine Datei umzuleiten. Wenn die Datei nicht vorhanden ist, wird sie von der Shell erstellt. Wenn es existiert, schneidet die Shell es ab (leert es). Wenn nur> file
kein Befehl vorhanden ist, erstellt die Shell eine Datei, aber es wird keine Ausgabe an sie gesendet. Der Nettoeffekt besteht also darin, eine leere Datei zu erstellen oder eine vorhandene Datei zu leeren.touch
ist ein externer Befehl, der eine Datei erstellt oder den Zeitstempel aktualisiert, wie Sie bereits wissen. Mittouch
geht der Dateiinhalt nicht verloren, wenn er vorhanden ist, anders als mit>
.Das Verhalten von
>
hängt von der Shell ab. In bash> foo
funktionieren dash und die meisten Shells wie erwartet. In zsh> foo
funktioniert das standardmäßig so:cat > foo
- zsh wartet darauf, dass Sie eine Eingabe eingeben.quelle
>> file
undtouch file
aber wennfile
nicht vorhanden ist , gibt es einen großen Unterschied zwischen den beiden von ihnen und> file
(in , dass die bisherigen Inhaltefile
verloren gehen). Dies und das inkonsistente Verhalten von zshtouch file
ist das "sicherste" und sollte daher als der richtige Weg, es zu tun, auswendig gelernt werden.Hier ist ein interessanter Vergleich:
Ergebnis:
quelle
strace
soll die ausgeführten Systemaufrufe und die> file.txt
Methode die geringste Anzahl ausgeführter Systemaufrufe anzeigen, was eigentlich nicht allzu überraschend ist - je komplexer ein Tool ist, desto komplexer sind seine Systemaufrufe. Das Problem mit den gezeigten Beispielen ist jedoch, dass standardmäßigstrace
zumstderr
Streamen geschrieben wird. In dieser Antwort verwendet Steven die Pipe nur zum Lesen.stderr
|
|&
|&
bekomme ich, wie bei @Serg erwähnt, ungefähr ein Fünftel der hier angegebenenvi
Werte ... mit Ausnahme des Falls, bei dem ich ungefähr den gleichen Wert