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 cat
genera 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 $1
el primer parámetro que pasa al script, pero en realidad no pasa ninguno. Esto significa que cat $file
en realidad se queda cat
solo. Cuando no se le proporcione ningún argumento, cat
simplemente imprimirá su entrada:
$ echo "foo" | cat
foo
Entonces, el primero cat
imprime 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 |wc
en 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