Como preservar o conteúdo da variável após o pipe

Como preservar o conteúdo da variável após o pipe

Eu tenho o seguinte script

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

Eu uso assim, cat some_file.txt | myScript.sh o primeiro catexibe o conteúdo do arquivo, enquanto o segundo não. Como posso preservar o conteúdo da variável após o pipe?

Responder1

Isso não está fazendo o que você pensa que está fazendo. Este $1é o primeiro parâmetro que você passa para o script, mas na verdade não está passando nenhum. Isso significa que cat $filena verdade fica catsozinho. Quando não for fornecido nenhum argumento, catapenas imprimirá sua entrada:

$ echo "foo" | cat
foo

Então, o primeiro catimprime a entrada, o conteúdo do arquivo. O segundo não tem entrada, pois tudo foi obtido pelo primeiro, portanto não faz nada. O que você quer fazer é algo como:

myscript.sh file

Isso imprimirá o conteúdo do arquivo duas vezes e também salvará a saída cat $file |wcna variável n.


Se o que você deseja é salvar o conteúdo do arquivo em $file, tente:

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

E execute o script com o nome do arquivo como argumento:

script.sh file

informação relacionada