Bir bash betiğinde nasıl yeni bir boş dosya oluştururum?


19

Ben çıkış bayrağı için bir çıkış dosyası gerektirecek şekilde yazılmış bazı üçüncü taraf Perl komut dosyası çalıştırıyorum -o.

Ne yazık ki, komut dosyası gerçek bir dosya gerektiriyor gibi görünüyor, yani kullanıcılar filename.txt0 bayt ile boş bir dosya oluşturmalı ve ardından bu boş dosyayı komut dosyası komut satırına girmelidir

perl script1.pl -o filename.txt

Soru: Bir bash betiğinde nasıl boş bir dosya oluştururum? Biri basitçe denerse perl script1.pl -o filename.txt, komut dosyası dosyanın bulunmadığına dair bir hata verir.


1
touch filename.txt
hschou


Yanıtlar:



6

Null command ( :) redirect ( > filename) trick ( :>) kullanın, çünkü bu sıfıra kısalır veya adlandırılmış dosyayı oluşturur.

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

(Kabuk bir NOCLOBBER seçeneği ayarlarsa bu başarısız olur.)


1
Eğer noclobber ayarlanmışsa, >|clobber'a yönlendirmeyi kullanın, böylece :>| filea- kılavuzda
glenn jackman

1
Sadece > filename.txtyapardı, gerek yok :. Ya da >> filename.txteğer varsa, onu çöpe atmak istemezsek.
ilkkachu

2
@ilkkachu, soru Bash'i belirtmesine rağmen, kullanarak :komut dosyasının Zsh gibi diğer kabuklarla görevini yerine getirme olasılığı daha yüksektir.
can-ned_food

3

Her zaman perl de kullanabilirsiniz.

$ 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: -
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.