Cómo preservar el contenido de la variable después de la tubería

Cómo preservar el contenido de la variable después de la tubería

Tengo el siguiente script

#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file

Lo uso así, cat some_file.txt | myScript.sh el primero catgenera el contenido del archivo mientras que el segundo no. ¿Cómo puedo conservar el contenido de la variable después de la tubería?

Respuesta1

Esto no está haciendo lo que crees que está haciendo. Es $1el primer parámetro que pasa al script, pero en realidad no pasa ninguno. Esto significa que cat $fileen realidad se queda catsolo. Cuando no se le proporcione ningún argumento, catsimplemente imprimirá su entrada:

$ echo "foo" | cat
foo

Entonces, el primero catimprime la entrada, el contenido del archivo. El segundo no tiene entrada ya que el primero lo tomó todo, por lo que no hace nada. Lo que quieres hacer es algo como:

myscript.sh file

Eso imprimirá el contenido del archivo dos veces y también guardará el resultado cat $file |wcen la variable n.


Si lo que quieres es guardar el contenido del archivo en $file, prueba:

file="$(cat < "$1")"

Y ejecute el script con el nombre del archivo como argumento:

script.sh file

información relacionada