Wie erstelle ich eine neue leere Datei in einem Bash-Skript?


18

Ich führe ein Perl-Skript eines Drittanbieters aus, das so geschrieben ist, dass eine Ausgabedatei für das Ausgabe-Flag erforderlich ist -o.

Leider scheint das Skript eine tatsächliche Datei zu erfordern, dh Benutzer müssen eine leere Datei filename.txtmit 0 Bytes erstellen und diese leere Datei dann in die Skriptbefehlszeile eingeben

perl script1.pl -o filename.txt

Frage: Wie würde ich eine leere Datei in einem Bash-Skript erstellen? Wenn man es einfach versucht perl script1.pl -o filename.txt, gibt das Skript einen Fehler aus, dass die Datei nicht existiert.


1
touch filename.txt
hschou


Antworten:



6

Verwenden Sie den null-Befehl ( :) redirect ( > filename) trick ( :>), da dieser auf null abschneidet oder die benannte Datei erstellt.

$ echo foo > filea
$ :> filea
$ wc -c filea
       0 filea
$ rm filea
$ :> filea
$ wc -c filea
       0 filea

(Dies schlägt fehl, wenn die Shell die Option NOCLOBBER setzt.)


1
Wenn noclobber eingestellt ist, verwenden Sie die Umleitung >|zu clobber, so :>| filea- dokumentiert im Handbuch
Glenn Jackman

1
> filename.txtWürde einfach tun, keine Notwendigkeit für die :. Oder >> filename.txtwenn wir es nicht wegwerfen wollen, wenn es tatsächlich existiert.
Ilkkachu

2
@ilkkachu Obwohl die Frage Bash angibt, erhöht die Verwendung :des Skripts die Wahrscheinlichkeit, dass es seine Aufgabe mit anderen Shells erledigt, z. B. Zsh.
can-ned_food

3

Sie können auch immer Perl verwenden.

$ stat filename.txt
stat: cannot stat 'filename.txt': No such file or directory
$ perl -e 'open($fh,">","filename.txt") or die $!;close($fh)'                                         
$ stat filename.txt                                                                                   
  File: 'filename.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 280728      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/ xieerqi)   Gid: ( 1000/ xieerqi)
Access: 2017-02-08 13:51:01.479121995 -0700
Modify: 2017-02-08 13:51:01.479121995 -0700
Change: 2017-02-08 13:51:01.479121995 -0700
 Birth: -
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.