Redirecionar stdin para stdout

2

Eu tenho um script, ex myscript.sh, e ele tem que redirecionar para stdout o que obtém do stdin (como um gato).

Por exemplo:

myscript.sh < myfile.txt > myfile2.txt

Como fazer isso?

Além disso, como posso redirecionar o stdout em outro arquivo, em vez de no myfile2.txt?

Minhas tentativas:

Eu tentei usar:

echo $*

E só funciona usando:

myscript.sh | cat myfile.txt

Se eu usar:

myscript.sh < myfile.txt

não imprime nada

    
por Federico Ponzi 17.07.2014 / 12:30

3 respostas

3

Eu não consigo entender o que você quer: $ * mostra os parâmetros posicionais e você não forneceu nenhum, então você não tem saída (além da nova linha).

cat não lê a entrada padrão quando recebe um arquivo para listar, então myscript.sh | cat myfile.txt tem o mesmo efeito que myscript.sh ; cat myfile.txt (não estritamente verdadeiro, mas correto em termos de entrada / saída).

Se você quiser que o seu script copie a entrada para a saída, ela deve conter simplesmente cat .

Se você quiser uma saída de $ *, então você precisa executar myscript.sh {parameters} .

E o que você quer dizer com "redirecionar o stdout em outro arquivo em vez de meuarquivo2.txt"? Você presumivelmente não quer dizer ... > myfile3.txt .

    
por 17.07.2014 / 13:26
4

Tente adicionar cat <&0 ao seu script onde você deseja realizar o trabalho de redirecionamento.

O &0 acima representa o descritor de arquivos stdin e, essencialmente, você está colocando as coisas obtidas de stdin a cat .

Como alternativa, use o seguinte loop para fazer você mesmo:

while read line
do
  echo "$line"
done
    
por 17.07.2014 / 16:36
0

Eu acho que você quer duplicar entrada de script para saída de terminal, não redirecionar.

cat myfile.txt | tee /dev/tty | myscript.sh > myfile2.txt

ou ainda mais simples

cat myfile.txt; myscript.sh < myfile.txt > myfile2.txt
    
por 17.07.2014 / 12:53