Как мне создать новый пустой файл в скрипте bash?


19

Я запускаю какой-нибудь сторонний скрипт на Perl, написанный так, что для выходного флага требуется выходной файл -o.

К сожалению, для сценария требуется фактический файл, то есть пользователи должны создать пустой файл filename.txtс 0 байтами, а затем ввести этот пустой файл в командной строке сценария.

perl script1.pl -o filename.txt

Вопрос: Как мне создать пустой файл в скрипте bash? Если кто-то просто пытается perl script1.pl -o filename.txt, скрипт выдаст ошибку, что файл не существует.


1
touch filename.txt
17


Ответы:



6

Используйте команду null command ( :) redirect ( > filename) trick ( :>), так как она усекается до нуля или создает именованный файл.

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

(Это не удастся, если оболочка установит параметр NOCLOBBER.)


1
Если NoClobber установлен, используйте перенаправление >|колошматить, так :>| filea- документированный в руководстве
Glenn Джекман

1
Просто > filename.txtсделал бы, не нужно :. Или >> filename.txtесли мы не хотим уничтожить его, если он действительно существует.
ilkkachu

2
@ilkkachu, хотя этот вопрос определяет Bash, использование :делает сценарий более вероятным для выполнения своей задачи с другими оболочками, например Zsh.
can-ned_food

3

Вы также всегда можете использовать Perl.

$ 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: -
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.