[Bash] Wczytywanie funkcja "read"

0

Witam. Mam taki problem - probuje wczytaj z pliku linijke i ja zapisac wyniki do zmiennych:
cat file | read ONE TWO THREE; echo $ONE;
to nie wypisuje nic na ekran, a chcialbym zeby te zmienne ONE, TWO, THREE zostaly wypelnione danymi, poniewaz pozniej je wykorzystuje do porownan itp. Plik zawiera jedna linijke z 3 wartosciami oddzielonymi spacjami, Jak to zrobic?
Analogicznie:
echo "jaamba" | read NAME; echo $NAME; nie wypisuje nic, a chcialbym zeby wypisalo "jaamba"
Pozdrawiam.

0
[mysz@urzenia ~]% read ONE
a
[mysz@urzenia ~]% echo $ONE
a
[mysz@urzenia ~]% echo 'b' |read ONE
[mysz@urzenia ~]% echo $ONE         
b
[mysz@urzenia ~]% echo Q W E > /tmp/a
[mysz@urzenia ~]% cat /tmp/a 
Q W E
[mysz@urzenia ~]% cat /tmp/a | read ONE TWO THREE
[mysz@urzenia ~]% echo $ONE          
Q
[mysz@urzenia ~]% echo $TWO
W
[mysz@urzenia ~]% echo $THREE
E
[mysz@urzenia ~]% 

SOA#1 ?

EDIT:
Khm, jakby coś to testowałem na zsh, w bashu rzeczywiście nie działa ;)

0

Wydaje mi sie ze to ma cos wspolnego z tym ze | (pipe) w bashu tworzy podproces basha, i te zmienne sa ustawiane tylko w tym zagniezdzinym bashu, a na zewnatrz, czyli poziom wyzej, nie sa widziane. No ale nie jestem pewien i nie wiem jak temu zaradzic, ale dzieki za odpowiedz.

0
  1. nie echo "jaamba" | read NAME; echo $NAME; tylko NAME=echo "jaamba"; echo $NAME;
  2. awk nie gryzie a nawet przydac sie moze
one=`awk '(NR == 1) {print $1}' file`
two=`awk '(NR == 1) {print $2}' file`
three=`awk '(NR == 1) {print $3}' file`
echo $one
echo $two
echo $three
0
  1. tak sie nie da wczytac za latwo do wiecej niz jednej zmiennej, musialbym bawic sie wycinaniem strngu po spacjach
  2. nie znam awk, na wszystko bedzie czas. dzieki za ten kod

pozdrawiam

0

awk fajna rzecz. Bywa zakręcony, ale przy jego pomocy z plikami tekstowymi zrobisz wszystko.

0
$ cat plik
ala ma kota
kot ma
ale

$ while read A B C;do echo "A = '$A' B = '$B' C = '$C'";done < plik                 
A = 'ala' B = 'ma' C = 'kota'
A = 'kot' B = 'ma' C = ''
A = 'ale' B = '' C = ''
A = '' B = '' C = ''
$ read A B C < plik; echo "A = '$A' B = '$B' C = '$C'"
A = 'ala' B = 'ma' C = 'kota'
$ 

działa w bashu (specjalnie zsh opuściłem dla testu)

cat w myszowym przykładzie jest zbędny, bo read może czytać od razu z pliku (jak to niektórzy mawiają: nie męczmy kota)
ten przykład z awk jest brzydki, bo dla każdej zmiennej rusza plik i to w nowym procesie

0

hej
dzieki za przyklad, jest tylko jedno ale - te zmienne sa widziale w obrebie petli while, a ja chce zrobic cos innego, i w tym przypadku nie zadziala. ogolnie:

  1. ustaw zmienne na puste stringi
  2. sprawdz czy taki a taki plik istnieje
    3 jesli istnieje, to wczytaj linijke do zmiennych
  3. dalej sobie wykorzystuj te zmienne

dzieki

0

[browar] do zobaczenia w TG na kurczaku ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1