[ wersja polska poniżej ]
english version
just found this nice brain teaser.
i have this code in bash:
echo -e "1 1\n2 2" | while read A B; do echo "[$A] [$B]"; echo "ZZZ"; done
it will print:
which is perfectly valid and sensible.
but if i'll change the command to:
echo -e "1 1\n2 2" | while read A B; do echo "[$A] [$B]"; ssh localhost date; echo "ZZZ"; done
i.e. i added ‘ssh localhost date' which connect to localhost over ssh, logins to my own account, and issues “date" command (can be any command), it shows only:
[1] [1]
Tue Sep 18 15:45:24 CEST 2007
ZZZ
and finishes work. (i have a password-less login in localhost, so it doesn't ask for password).
and the question is: why there is no second step of while loop?
( side note: i know the answer, it's just a riddle for you 🙂
wersja polska
trafiłem właśnie na niezłą łamigłówkę:
poniższa linijka w bashu:
echo -e "1 1\n2 2" | while read A B; do echo "[$A] [$B]"; echo "ZZZ"; done
wypisze:
co jest w pełni sensowe i oczekiwane.
ale jeśli zmienię ją na:
echo -e "1 1\n2 2" | while read A B; do echo "[$A] [$B]"; ssh localhost date; echo "ZZZ"; done
tzn. dodam ‘ssh localhost date', co łączy się na moje konto na localhoście i wykonuje polecenie “date" (może to być dowolne polecenie), wynikiem całości jest tylko:
[1] [1]
Tue Sep 18 15:45:24 CEST 2007
ZZZ
i to koniec (mam logowanie bezhasłowe więc nie ma prośby o hasło).
pytanie: czemu nie ma drugiego wykonania kodu w pętli while?
( oczywiście (jak przy poprzednich łamigłówkach) znam odpowiedź ).