Pipes, y cómo usarlos en bash

Veo comandos como este en algunos scripts: /bin/cat somefile | someprogram. Me gustaría saber cómo leer la tubería completa de la misma manera que lo hace algún programa. Entonces, cuando ejecuto /bin/cat something | myprogram.sh, myprogram.sh tiene una variable llamada mypipevar igual a lo que se canalizó: todo el texto de la canalización. Si no está claro, hágamelo saber. He leído que la lectura probablemente no funcionará y que bash puede no ser el shell correcto.

Respuesta

La tubería se conecta stdout de un programa a stdin de otro, por lo que en su secuencia de comandos simplemente lea desde stdin y obtendrá lo que imprimió el comando anterior. Una forma sencilla de leer esto en una variable es con cat, por ejemplo, dentro de myprogram.sh:

mypipevar="$(cat ${1:-/dev/stdin})" echo "Obtained the value: "$mypipevar"" 

Sin embargo, bastante a menudo desea procesar las cosas línea por línea en lugar de todas a la vez, esto se puede hacer con

while read line do echo "$line" done < "${1:-/dev/stdin}" 

Tenga en cuenta que ${1:-/dev/stdin} le dará el primer argumento, o si no se especifican argumentos, entonces /dev/stdin que contendrá el contenido de stdin que puede leerse como un archivo. Esto le permite ejecutar el script como command | script o simplemente como script filename.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *