Ik “voer een Perl-script van derden uit dat zo is geschreven dat het een uitvoerbestand nodig heeft voor de uitvoervlag, -o
.
Helaas lijkt het script een echt bestand te vereisen, dat wil zeggen dat gebruikers een leeg bestand filename.txt
met 0 bytes moeten maken en dit vervolgens moeten invoeren leeg bestand op de scriptopdrachtregel
perl script1.pl -o filename.txt
Vraag: Hoe zou ik een leeg bestand aanmaken in een bash-script? Als je gewoon , het script geeft een foutmelding dat het bestand” niet bestaat.
Opmerkingen
Antwoord
Gebruik touch
comm en. touch filename.txt
.
Reacties
-
echo -n >file
- pas op – dit zal je bestand niet legen als het al bestaat
- Eigenlijk heb ik touch en " echo -n bestand " in mijn bash-script, maar ik krijg een foutmelding wanneer ik het script uitvoer: " Dit bestand bestaat niet of directory " op die regel. Kan iemand alsjeblieft helpen?
-
echo -n "" > filename
zal het bestand legen als het bestaat of maakt een bestand aan als het niet ' t bestaan.
Answer
Gebruik het null-commando (:
) redirect (> filename
) trick (:>
), omdat dit wordt afgebroken tot nul of het genoemde bestand wordt gemaakt.
$ echo foo > filea $ :> filea $ wc -c filea 0 filea $ rm filea $ :> filea $ wc -c filea 0 filea
(Dit zal mislukken als de shell een NOCLOBBER-optie instelt.)
Opmerkingen
- Als noclobber is ingesteld, gebruik dan de omleiding
>|
naar clobber, dus:>| filea
– gedocumenteerd in de handleiding - Gewoon
> filename.txt
zou volstaan, de:
is niet nodig. Of>> filename.txt
als we ' het niet willen weggooien als het toch bestaat. - @ilkkachu hoewel de vraag specificeert Bash, het gebruik van
:
maakt het script waarschijnlijker om zijn taak te volbrengen met andere shells, bijvoorbeeld Zsh.
Answer
Je zou ook altijd perl kunnen gebruiken.
$ 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: -
Antwoord
De kortste weg:
>filename
Reacties
- Beste antwoord. Kan ' niet korter zijn.
touch filename.txt