Mogłem to zrobić w jakimkolwiek innym języku, ale z Bashem wyglądałem bardzo szeroko i nie mogłem znaleźć odpowiedzi.Ręczne wykonywanie iteracji linii pliku | bash
Muszę ręcznie zwiększyć $line
w skrypcie. Przykład:
for line in `cat file`
do
foo()
foo_loop(condition)
{
do_something_to_line($line)
}
done
Jeśli zauważysz, za każdym razem foo_loop
iteracje, $line
pozostaje taka sama. Muszę tam powtórzyć numer $line
i upewnić się, że oryginalna pętla zawiera tylko liczbę wierszy w pliku.
Zastanawiałem się nad znalezieniem liczby wierszy w pliku przy użyciu innej pętli i iterowaniem zmiennej liniowej wewnątrz wewnętrznej pętli foo()
.
Wszelkie pomysły?
EDIT:
Przepraszam za tak niejasne.
Zaczynamy:
Próbuję zrobić sekcję mojego kodu wykonać wielokrotnie (wykonanie równoległe)
Function foo() # Does something
for line in `cat $temp_file`;
foo($line)
Ten kod działa dobrze, ponieważ foo
właśnie biorąc w wartość linii; ale gdybym chciał to zrobić:
Function foo() # Does something
for line in `cat $temp_file`;
while (some condition)
foo($line)
end
$line
wyniesie taką samą wartość całej pętli while. Potrzebuję go zmienić za pomocą pętli while
, a następnie kontynuować, gdy powróci do for
. Przykład:
line = Hi
foo{ echo "$line" };
for line in `cat file`;
while (number_of_processes_running -lt max_number_allowed)
foo($line)
end
Jeśli zawartość pliku zostały
Hi \n Bye \n Yellow \n Green \n
Wyjście przykładowego programu to (jeśli maksymalna ilość pozostawiano 3)
Hi Hi Hi Bye Bye Bye Yellow Yellow Yellow Green Green Green.
Tam, gdzie ma to być
Hi Bye Yellow Green
Mam nadzieję to jest lepsze. Staram się wyjaśnić mój problem.
Myślę, że potrzebujemy jaśniejszego przykładu tego, co próbujesz osiągnąć. foo() wydaje się definiować funkcję powłoki w pętli, której nie jestem pewien, czego chcesz. –