Thread View: pl.comp.os.linux.programowanie
2 messages
2 total messages
Started by piecia aka dracorp
Sun, 23 Jan 2011 22:27
bash, wykrywanie stdin
Author: piecia aka dracorp
Date: Sun, 23 Jan 2011 22:27
Date: Sun, 23 Jan 2011 22:27
63 lines
2301 bytes
2301 bytes
Witam Rozwiązanie w sumie mam ale coś mi się nie zgadza. Dlatego prosiłbym o wyjaśnienie. Głównie chciałem w skrypcie wykryć w jaki sposób są podawane dane. #v+ #!/bin/bash if [ -f "$1" ]; then FILE=$1 echo "Czytam z pliku" while read LINE; do echo $LINE done < $FILE elif [ ! -t 0 ]; then echo $? ls -l /dev/fd/0 echo "Czytam z stdin" while read LINE; do echo $LINE done else echo "Nie podano danych" fi #v- Z man test: -t FD file descriptor FD is opened on a terminal Ja to rozumiem, że jeżeli deskryptor fd(w moim przypadku 0) jest otwarty to test zwraca 0 i można wywnioskować że dane są podawane z stdin. Ale dlaczego musiałem użyć ! w moim teście? Dla przykładu że to działa: #v+ $ echo -e "ala ma kota\na kot ma ale" > plik $ ./stdin.sh plik Czytam z pliku ala ma kota a kot ma ale $ ./stdin.sh < plik 0 lr-x------ 1 piecia piecia 64 01-23 23:21 /dev/fd/0 -> /home/piecia/bin/ skrypty/moje/test/plik Czytam z stdin ala ma kota a kot ma ale $ ./stdin.sh Nie podano danych $ cat plik | ./stdin.sh 0 lr-x------ 1 piecia piecia 64 01-23 23:21 /dev/fd/0 -> pipe:[173977] Czytam z stdin ala ma kota a kot ma ale #v- Czyli domyślnie fd 0 jest ciągle otwarty a na czas wykonywania skryptu i przesyłania danych w potoku lub przez stdin jest zamykany? Dobrze myślę? -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
Re: bash, wykrywanie stdin
Author: Adam Osuchowski
Date: Sun, 23 Jan 2011 22:58
Date: Sun, 23 Jan 2011 22:58
13 lines
1451 bytes
1451 bytes
piecia aka dracorp wrote: > Z man test: > -t FD file descriptor FD is opened on a terminal > > Ja to rozumiem, że jeżeli deskryptor fd(w moim przypadku 0) jest otwarty > to test zwraca 0 i można wywnioskować że dane są podawane z stdin. Pomieszałeś pojęcia. Parametr -t sprawdza, czy dany strumień jest terminalem, a nie czy jest otwarty. Proces prawie zawsze ma standardowe wejście (czyli strumień o deskryptorze 0), a to czy to jest regularny plik, potok (pipe) czy terminal to jest inna kwestia. W praktyce oznacza to, że ,,[ -t 0 ]'' zwróci prawdę (0) jeśli skrypt zostanie uruchomiony z interaktywnego shella na terminalu bez żadnych przekierowań wejścia (<).
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads