Jak utworzyć nowy pusty plik w skrypcie bash?


19

Biegnę trochę innej firmy Perl skrypt napisany w taki sposób, że wymaga plik wyjściowy dla flagi wyjściowego -o.

Niestety skrypt wydaje się wymagać rzeczywistego pliku, tzn. Użytkownicy muszą utworzyć pusty plik filename.txtz 0 bajtami, a następnie wprowadzić ten pusty plik w wierszu polecenia skryptu

perl script1.pl -o filename.txt

Pytanie: Jak mam utworzyć pusty plik w skrypcie bash? Jeśli ktoś po prostu spróbuje perl script1.pl -o filename.txt, skrypt wyświetli błąd, że plik nie istnieje.


1
touch filename.txt
hschou


Odpowiedzi:



6

Użyj polecenia null ( :) przekierowania ( > filename) trick ( :>), ponieważ spowoduje to obcięcie do zera lub utworzenie nazwanego pliku.

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

(To się nie powiedzie, jeśli powłoka ustawi opcję NOCLOBBER.)


1
Jeśli noclobber jest ustawiony, użyj przekierowania >|do clobber, więc :>| filea- udokumentowane w instrukcji
glenn jackman

1
Po prostu > filename.txtzrobiłbym, bez potrzeby :. Lub >> filename.txtjeśli nie chcemy wyrzucać go do śmieci, jeśli tak się dzieje.
ilkkachu

2
@ilkkachu, chociaż pytanie określa Bash, użycie :zwiększa prawdopodobieństwo, że skrypt spełni swoje zadanie z innymi powłokami, np. Zsh.
can-ned_food

3

Zawsze możesz też użyć perla.

$ 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: -
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.