Aufmerksamkeit bitte:
Ich frage nicht , wie man eine Datei von der Kommandozeile aus erstellt!
Ich benutze es seit Jahren, touch
um Dateien zu erstellen, ohne darauf zu achten, dass sein Hauptzweck etwas anderes ist. Wenn man eine Datei von der Kommandozeile aus erstellen möchte, gibt es so viele Möglichkeiten:
touch foo.bar
> foo.bar
cat > foo.bar
echo -n > foo.bar
printf '' > foo.bar
Und ich bin mir sicher, dass es noch mehr gibt.
Tatsache ist jedoch, dass keiner der oben genannten Befehle für die Erstellung von Dateien vorgesehen ist. Beispiel: man touch
Dieser Befehl dient zum Ändern von Dateizeitstempeln. Warum verfügt ein Betriebssystem, das so vollständig ist wie Unix (oder Linux), nicht über einen Befehl, der ausschließlich zum Erstellen von Dateien vorgesehen ist?
bash
shell
command-line
files
Pouya
quelle
quelle
cat
Konfi- guration bestimmt ist!more
wennless
mehr geht als wasmore
? Oderdir
undls
. Allerdings sind mir Kompatibilitätsprobleme bekannt.more
vor der Schaffung vonless
.less
wurde speziell entwickelt, um die Mängel vonmore
.more
ist aus Gründen der Abwärtskompatibilität noch vorhanden.dir
undls
sind in den meisten Fällen dieselbe ausführbare Datei - sie unterscheiden sich nur in wenigen Bytes. Ein neues Werkzeug für die speziellen Dateien für die Erstellung tun würde weniger als die bestehenden Werkzeuge, und als solche , es wäre eine Regression, keine Verbesserung wie im Fall seinless
vsmore
.Antworten:
Ich würde sagen, weil es selten notwendig ist, eine leere Datei zu erstellen, die Sie nicht sofort in der Befehlszeile oder in Shell-Skripten mit Inhalten füllen.
Es ist absolut nicht vorteilhaft, zuerst eine Datei zu erstellen und dann die E / A-Umleitung zu verwenden, um in die Datei zu schreiben, wenn Sie dies in einem Schritt tun können.
In den Fällen, in denen Sie wirklich eine leere Datei erstellen und sie
> "${file}"
belassen möchten, würde ich argumentieren, dass dies nicht kürzer und eleganter sein könnte.TL; DR : Es ist nicht vorhanden, da das Erstellen leerer Dateien häufig keine Verwendung hat und in Fällen, in denen dies der Fall ist, bereits unzählige Optionen zur Verfügung stehen, um dieses Ziel zu erreichen.
Nebenbei bemerkt
touch
funktioniert using nur, wenn die Datei nicht vorhanden ist, wohingegen Optionen, die die Umleitung verwenden, die Datei immer abschneiden, selbst wenn sie vorhanden ist (technisch gesehen sind diese Lösungen also nicht identisch).> foo
ist die bevorzugte Methode, da sie a speichertfork
undecho -n
generell vermieden werden sollte, da sie sehr unportabel ist.quelle
>>
). Ich bezog mich auf die Beispiele von OP mit>
. Das Anhängen von Dateien wäre völlig nutzlos, wenn Sie Dateien erstellen möchten (oder NOOP heraus, falls vorhanden).noclobber
nicht festgelegt werden muss,>
damit eine vorhandene Datei überschrieben wird.alias rm='rm -i'
anstelle vonalias rmi='rm -i'
eine schlechte Idee ist.> .file
allein auf einer Kommandozeile, macht das ohne das vollkommen gut:
.Die Antwort von Adrian Frühwirth ist richtig. Ich wollte nur hinzufügen , dass es tatsächlich ein Befehl ist speziell geschriebenen Dateien zu erstellen:
mktemp
.Zugegeben, es
mktemp
geht nicht darum, eine Datei mit einem bestimmten Namen zu erstellen, sondern nur darum, eine Datei zu erstellen . Wie Sie bereits erfahren haben, gibt es so viele effizientere und elegantere Möglichkeiten, Dateien mit einem bestimmten Namen zu erstellen, dass ein entsprechender Befehl keinen Sinn macht.Das heißt, Sie haben auch
truncate
undfallocate
beide, deren wesentlicher Zweck es ist, Dateien zu erstellen. Sie haben einfach einen ausgefeilteren Ansatz. Es wird niemals ein einfaches Programm geben, das das> file
tut , was es tut, da es auf keinen Fall besser wäre als> file
.quelle
Die meisten grundlegenden Shell - Tools sind nicht ausgelegt für jeden ganz bestimmten Zweck überhaupt. Die meisten grundlegenden Shell-Tools sind nur für die Interaktion mit anderen gedacht , um Ihren Zweck zu erreichen. Oder vielleicht sollte gesagt werden, dass die meisten Tools nur eine sehr grundlegende Funktion haben, unabhängig davon, wie sie kombiniert werden, um ein Ziel zu erreichen.
Das erstellt eine leere Datei. Oder kürzt eine vorhandene Datei wie gewünscht. Sie können:
um den letztgenannten Fall zu vermeiden, es sei denn, Sie:
Sie können sich ähnlich verhalten wie
touch
mit:Mit der Ausnahme, dass
:
die Änderungszeit einer Datei nicht aktualisiert wird, da sie nicht geändert wird.DEMO
AUSGABE
NICHT BERÜHREN
AUSGABE
quelle
\n
am Ende der Zeile hinzugefügt. Versuchen Sieecho -n >echo-n.file
(Größe = 0) undecho -e >echo-e.file
(Größe = 1)cat
. Warum einen Befehl zum Anzeigen einer Datei haben, wenn Sie einen Befehl zum Verketten mehrerer Dateien zur Standardausgabe ausführen könnten?Das Dienstprogramm
install
ist eigentlich zum Erstellen von Dateien gedacht! Sie können den Inhalt der Datei übermitteln/dev/stdin
(in den meisten Fällen ist dies jedoch für die meisten Linux-Versionen erforderlich/proc
) oder eine andere Quelldatei bereitstellen. Sie können den Besitz und die Berechtigungen festlegen.als ein dummes Beispiel.
quelle