Petla while read czyta tylko jedna linie

0

Czesc, mam problem z tym skryptem. Jako argument podaje input.txt w ktorym sa wszystkie pliki obecengo katalogu, skrypt ma mi posortowac kazdy i zapisac wszystkie do output.txt oddzielajac je "----". Niestety skrypt czyta tylko pierwszy plik, sortuje go, zapisuje i konczy prace. Z tego co czytalem to w jakis sposob inna komenda "zjadam" reszte wejscia, ale nie moge tego ogarnac. Prosze o jakies wskazowki.

#!/bin/bash
if [ -f $1 ]
then
  while IFS='' read -r x
  do
        if [ -f $x ]
        then
                sort  --output=output.txt $x;
                echo "-------">>output.txt;
        else
                echo "plik-testowy-$x nie istnieje lub nie jest zwykłym plikiem!">>output.txt;
                echo "-------">>output.txt;
        fi
  done < $1
else
  echo "plik-testowy-$1 nie istnieje lub nie jest zwykłym plikiem!"
fi

0

Nie powinieneś tam mieć done < <(cat $1)?

0

@Patryk27: Niestety nie dziala :( efekt ten sam

4
sort  --output=output.txt $x;

Takie wywołanie sort nadpisuje plik output.txt, usuwając jego dotychczasową zawartość. Twoja pętla jest ok.

Zamiast tego możesz po prostu przekierować wyjście z sort, tak jak robisz to z echo:

sort "$x" >> output.txt

1 użytkowników online, w tym zalogowanych: 0, gości: 1