Desde que supe del concepto del entubamiento de comandos ha sido algo a lo que recurro mucho. Aunque generalmente es con los comandos que componen el temario de cualquier curso intermedio de Unix (comandos que van más allá de un cd
, ls
, mv
o pwd
).
Otros comandos más especializados (y obscuros para muchos) los uso con menos frecuencia y generalmente sin pensar en usarlos como parte de un pipe. Tal es el caso del hexadump(1)
.
Ayer, mientras trabajaba en la modificación de la respuesta de un servicio web, cuyo backend se encuentra desarrollado en Python, mientras hacía unas primeras pruebas con curl(1)
me topé conque tras procesar la respuesta se incluía un line feed o carriage return extra.
$ curl ... | jq ... -1 2 -2 $
la solución inmediata sería agregar un sed al pipe eliminando las líneas vacías pero, ¿realmente estaban vacías? Claro que para salir de dudas lo usual es que uno conserve la salida del comando en un archivo para revisarlo pero a veces eso da flojera. Recordando la filosofía de Unix, me pregunté si hexadump(1)
podría entubarse para checar rápidamente el asunto. Funcionó.
$ curl ... | jq ... | hexdump -C 00000000 0a 2d 31 0a 20 0a 32 0a 0a 2d 32 0a |.-1. .2..-2.| 0000000c $