Zastanawiam się, jak tworzyć ruręrura linux z wielu programów z prośbą o dane wprowadzone przez użytkownika
program 1 | ... | program N
gdzie wielokrotnością programów poprosić o dane wprowadzone przez użytkownika. Problem polega na tym, że |
uruchamia programy równolegle i w ten sposób rozpoczynają odczytywanie równolegle z terminala.
W takich przypadkach użyteczne byłoby posiadanie rury |
, która uruchamia program (i + 1) tylko po tym, jak program i wygenerował pewną wydajność.
Edit:
Przykład:
cat /dev/sda | bzip2 | gpg -c | ssh [email protected] 'cat > backup'
Tutaj zarówno gpg -c
jak ssh
poprosić o hasło.
Rozwiązaniem tego konkretnego przykładu byłoby utworzenie par kluczy ssh, ale nie jest to możliwe w każdym systemie i zastanawiałem się, czy istnieje ogólne rozwiązanie. Również gpg pozwala na przekazanie hasła jako argumentu wiersza poleceń, ale nie jest to sugerowane ze względów bezpieczeństwa.
Po podłączeniu program do rury, to dostaje swoje wejście z innego programu, a nie użytkownika. Czy na pewno chcesz rurę? Nie mogę myśleć o programie, który zarówno pobiera dane wprowadzane przez użytkownika *, jak i * ze standardowego wejścia. – chepner
Nie jest to odpowiedź, ale pomysł, który może wskazać ci właściwy kierunek: Czy możesz dołączyć kod do każdego programu, aby sprawdzić wynik dla określonego ciągu, aktualizując flagę, która została znaleziona i posiadającą inne pętle połączeń, aż do wyświetlenia flagi poprzedniego programu zaktualizowany, a następnie pozwolić im działać? – JohnLBevan
Pokaż konkretny przykład tego zdarzenia. Program mógł czytać z 'stdin' i'/dev/tty', ale byłoby to niezwykłe. –