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
exibe 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 $file
na verdade fica cat
sozinho. Quando não for fornecido nenhum argumento, cat
apenas imprimirá sua entrada:
$ echo "foo" | cat
foo
Então, o primeiro cat
imprime 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 |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 argumento:
script.sh file