Olyan harmadik féltől származó Perl szkriptet futtatok, amely úgy van megírva, hogy a kimeneti zászlóhoz kimeneti fájl szükséges, -o
Sajnos úgy tűnik, hogy a szkript tényleges fájlt igényel, vagyis a felhasználóknak létre kell hozniuk egy 0 byte-os üres fájlt filename.txt
, majd be kell ezt írni üres fájl a parancsfájl parancssorán
perl script1.pl -o filename.txt
Kérdés: Hogyan hozhatnék létre egy üres fájlt egy bash szkripten belül? Ha valaki egyszerűen megpróbálja perl script1.pl -o filename.txt
, a szkript hibát ad, hogy a fájl nem létezik.
Megjegyzések
Válasz
Használja a touch
comm és. touch filename.txt
.
Megjegyzések
Válasz
Használja a null parancsot (:
) átirányítás (> filename
) trükk (:>
), mivel ez nullára csonkol, vagy létrehozza a megnevezett fájlt.
$ echo foo > filea $ :> filea $ wc -c filea 0 filea $ rm filea $ :> filea $ wc -c filea 0 filea
(Ez sikertelen lesz, ha a shell NOCLOBBER beállítást állít be.)
Megjegyzések
- Ha a noclobber be van állítva, használja a
>|
átirányítást klobra, így:>| filea
– dokumentált a kézikönyvben - Csak
> filename.txt
tenné, nem kell a:
. Vagy>> filename.txt
ha nem ' nem akarjuk kukába tenni, ha történetesen létezik. - @ilkkachu bár a kérdés megadja a Bash-t, a
:
használatával a szkript nagyobb valószínűséggel teljesíti a feladatát más héjakkal, pl. Zsh.
Válasz
A perl-t is mindig használhatja.
$ 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: -
Válasz
A legrövidebb út:
>filename
Megjegyzések
- A legjobb válasz. Nem lehet ' t rövidebb.
echo -n >file
echo -n "" > filename
ki fogja üríteni a fájlt, ha létezik, vagy létrehoz egy fájlt, ha nem ' t létezik.