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