Bash: ¿Qué hace "> |"?

148

Acabo de ver esto escrito;

$ some-command >| /tmp/output.txt

Las tuberías verticales se utilizan en redirecciones estándar "canalizando" la salida de un comando a otro, >|de hecho , ¿es completamente inútil ya que sería lo mismo que >en este escenario?

jwbensley
fuente

Respuestas:

220

No es inútil: es una forma especializada del >operador de redireccionamiento simple (y, quizás de manera confusa, nada que ver con tuberías). bashy la mayoría de los otros shells modernos tienen una opción noclobber, que evita que la redirección sobrescriba o destruya un archivo que ya existe. Por ejemplo, si noclobberes verdadero y el archivo /tmp/output.txtya existe, entonces esto debería fallar:

$ some-command > /tmp/output.txt

Sin embargo, puede anular explícitamente la configuración de noclobbercon el >|operador de redirección: la redirección funcionará, incluso si noclobberestá configurada.

Puede averiguar si noclobberestá configurado en su entorno actual con set -o.

Para la nota histórica, tanto la opción "noclobber" como sus funciones de derivación provienen de csh(finales de los 70). kshlo copió (principios de los 80) pero se usó en >|lugar de >!. POSIX especificó la kshsintaxis (por lo que todos los shells POSIX, incluidos bash, derivados de cenizas más nuevos utilizados como sh en algunos sistemas lo admiten). Zsh admite ambas sintaxis. No creo que se haya agregado a ninguna variante de shell Bourne, pero podría estar equivocado.

D_Bye
fuente
3
@sch - re su nota histórica (gracias por la información adicional, por cierto) - FreeBSD shtiene noclobber, desde aproximadamente mayo de 2002.
D_Bye