Petla while read czyta tylko jedna linie

Petla while read czyta tylko jedna linie
P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
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.

Kopiuj
#!/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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

P1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

@Patryk27: Niestety nie dziala :( efekt ten sam

Sensacyjny Sebastian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 402
4
Kopiuj
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:

Kopiuj
sort "$x" >> output.txt

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.