Keresés

Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz ALI_G #92 üzenetére

    Kérlek szépen a sima read-es változat az ennyi:

    i=0
    exec 3<&0
    cat ''$1'' | while read line
    do
    echo ''$line''
    if [ $((i++)) -eq 24 ]
    then
    read <&3
    i=0
    fi
    done

    A trükk amit említettem az exec-es sor. A fájlleíróknak linuxban számuk van. A 0,1,2 rendre az stdin, stdout és stderr. A többit arra használod amire akarod. A 3<&0 átirányítás azt jelenti, hogy a 0-ás bemeneti fájlleírót (ami ezek alapján akkor az stdin) duplikálja 3-as számúként.

    A while ciklus a pipe miatt alshellben fog futni, aminek az stdin-je a cat stdout-jára van kötve ezért ''elveszik'' a szülõ shell stdin-je (a terminál). Viszont a 3-as számmal ez továbbra is elérhetõ. Vagyis a belsõ read-nek megmondjuk, hogy innen olvasson. (az az átirányítás technikailag azt jelenti, hogy a 3-ast ismét visszaduplikálja a 0-ásra, mivel a read onnan fog olvasni.)

    Bonyolultan hangzik, de egyszerû. Remélem érthetõ voltam :F

    Jester

Új hozzászólás Aktív témák