Hoe maak ik een nieuw leeg bestand in een bash-script?

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *