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

  • Jester01
    veterán

    uh hogy a fene enné meg és a fene fenét enne....
    Nekem nincs jobb 5letem. Amit még 2 v 3 napja írtál a sima read-es, az meg nehéznek néz ki. Nem hiszem h van arra időm h kihámozzam, de ha nem találok semmit, akkor nekifogok úgy. Bár egyedül kétlem h menne.
    Egy kívánságom van: tudjak eccer linuxul. ;]

    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

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