¿Es tal redirección "|>" solo un error o significa algo?

9

Lo escribí por error, pero bash no imprimió ningún error (pero creó un archivo vacío), así que pensé que tal vez realmente significa algo. (por ejemplo, fecha |> tmp.txt)

Bdimych2 Bdimych2
fuente
1
¿Estás seguro de que el comando no tiene la forma date |> tmp.txt cmd2? Porque eso cambia la respuesta.
Konrad Rudolph

Respuestas:

17

Eso parece ser solo una tubería donde la segunda parte es un comando vacío, que solo contiene la redirección. Escribirlo como date | >filepodría facilitar su interpretación. El comando vacío no hace nada más que procesar la redirección, creando el archivo.

date >| filepor otro lado, actuaría como una anulación para la noclobberopción de shell, lo que evita que el >archivo normal sobrescriba los archivos existentes.

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works
ilkkachu
fuente
1

Sí, no arrojará error porque para bash > filesignifica redirigir a un archivo llamado file. Como en su caso no hay nada que redirigir al archivo, bash solo creará un nombre de archivo filesin nada.

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 
Bhagyesh Dudhediya
fuente
Gracioso. Zsh tiene un comportamiento diferente: después del comando, my_filecontiene la salida de date.
NI
12
@NajibIdrissi, en zsh, cuando solo hay redirecciones y ningún comando, zshejecuta el $NULLCMDcomando ( catpor defecto) o $READNULLCMD(un buscapersonas por defecto) si solo hay redirecciones de entrada .
Stéphane Chazelas