Hoe stdin in twee bestanden te kopiëren?

Ik moet script.sh hebben om bestanden f1.txt en f2.txt te maken met inhoud die naar stdin is verzonden. Bijvoorbeeld:

echo ABRACODABRA | script.sh

... zou bestanden f1.txt en f2.txt moeten maken met de inhoud ABRACODABRA .

Hoe kan ik dit doen?

Geef de body van script.sh op!

4
cp f1.txt f2.txt ?
toegevoegd de auteur Gumbo, de bron

2 antwoord

U hebt tee nodig.

$ echo 'foo' | tee f1.txt f2.txt 

of

$ echo 'foo' | tee f1.txt > f2.txt

om de extra uitvoer naar stdout te onderdrukken.

Ik vermoed dat je echte probleem zou kunnen zijn om te lezen vanuit de invoer in een script. Raadpleeg in dit geval deze vraag . Dat geeft je zoiets als

while read input; do
    echo $input | tee -a f1.txt > f2.txt
done
8
toegevoegd
@ user643540 Zie Bewerken
toegevoegd de auteur Lev Levitsky, de bron
@Patrick, dat is wat Bos hierboven zegt :) om de een of andere reden voldeed het niet aan het OP.
toegevoegd de auteur Lev Levitsky, de bron
En hoe kan ik het binnen script.sh doen?
toegevoegd de auteur Stepan Yakovenko, de bron
Wat moet ik in script.sh schrijven?
toegevoegd de auteur Stepan Yakovenko, de bron
Op dezelfde manier als je buiten zou doen.
toegevoegd de auteur bos, de bron
Ik zou de lus helemaal opslokken en voer tee f1.text> f2.txt (of iets dergelijks) uit. Ik zie geen enkel voordeel om de shell STDIN te laten lezen voordat deze wordt doorgegeven aan tee .
toegevoegd de auteur Patrick, de bron

Uw script kan er als volgt uitzien:

 #!/bin/bash
 read msg
 echo $msg > f1.txt
 echo $msg > f2.txt
 exit 0
1
toegevoegd