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

3

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 cat produz o conteúdo do arquivo enquanto o segundo não. Como posso preservar o conteúdo da variável após o pipe?

    
por LetsPlayYahtzee 27.10.2016 / 13:12

1 resposta

5

Isso não está fazendo o que você acha que está fazendo. O $1 é o primeiro parâmetro que você passa para o script, mas você não está passando nenhum. Isso significa que cat $file se torna cat sozinho. Quando não for dado nenhum argumento, cat apenas imprimirá sua entrada:

$ echo "foo" | cat
foo

Assim, o primeiro cat imprime a entrada, o conteúdo do arquivo. O segundo não tem entrada desde que tudo foi tomado pelo primeiro, então 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 de cat $file |wc na 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 um argumento:

script.sh file
    
por 27.10.2016 / 13:28