¿Cómo creo un nuevo archivo vacío en un script bash?


19

Estoy corriendo un poco de Perl script de terceros escrita de tal manera que se requiere un archivo de salida para la salida de la bandera, -o.

Desafortunadamente, el script parece requerir un archivo real, es decir, los usuarios deben crear un archivo vacío filename.txtcon 0 bytes y luego ingresar este archivo vacío en la línea de comando del script

perl script1.pl -o filename.txt

Pregunta: ¿Cómo crearía un archivo vacío dentro de un script bash? Si uno simplemente lo intenta perl script1.pl -o filename.txt, el script da un error de que el archivo no existe.


1
touch filename.txt
hschou


Respuestas:



6

Utilice el comando nulo ( :) redirect ( > filename) trick ( :>), ya que esto se truncará a cero o creará el archivo con nombre.

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

(Esto fallará si el shell establece una opción NOCLOBBER).


1
Si noclobber está configurado, use la redirección >|a clobber, así :>| filea, documentado en el manual
Glenn Jackman

1
Simplemente > filename.txtlo haría, no hay necesidad de :. O >> filename.txtsi no queremos tirarlo a la basura si es que existe.
ilkkachu

2
@ilkkachu, aunque la pregunta especifica Bash, el uso :hace que el script sea más probable que cumpla su tarea con otros shells, por ejemplo, Zsh.
can-ned_food

3

Siempre puedes usar perl, también.

$ 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: -
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.