[Linux-Bash] Opvangen van output extract_compressed_fs

Pagina: 1
Acties:

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik probeer in een bash-script de output van extract_compressed_fs (onderdeel van het cloop-utils pakket) op te vangen...
Extract_compressed_fs pakt in dit geval een "knoppix-file" uit en geeft ouput in de vorm van : 'Totale hoeveelheid blocks' (1) en 'Voortgang van uitgepakte blocks' (2).
Nu wil ik (1) opvangen, waardoor ik de voortgang kan weergeven in procenten.
Dit kan natuurlijk als ik de gehele output naar een (tijdelijke) file schrijf, maar dit vertraagt het hele proces aanzienlijk, waardoor ik het dus "on-the-fly" zou willen kunnen. Iemand hier enig idee hoe ik dit zou kunnen aanpakken ?

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:21
bash scripting hoort niet thuis in P&W, maar in NOS
-> NOS

https://fgheysels.github.io/


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Bedankt voor het verplaatsen...
In het verleden heb ik al wel vaker in NOS iets gezet over bash-scripting en toen werd ik juist overgeplaatst naar P&W... nouja, maakt mij op zich niet uit waar ie staat ;)

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Wat zijn de exacte commando's die je geeft? Hoe ziet de uitvoer er precies uit?

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Exacte commando(s) is misschien een beetje lang (veel grep ed.), maar het originele commando gaat als volgt :
code:
1
extract_compressed_fs KNOPPIX-FILE > ISO-FILE.iso

Met veel greps en andere aanpassingen, krijg ik de output als volgt :
code:
1
2
3
4
5
6
7
985
0
1
2
3
...
984

Hierin is dus het bovenste getal het totale aantal blocks (krijg ik volgens mij anders niet uitgelezen ?!) en daarna dus de voortgang van het converteren...

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

iets in de trant van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

X=1
typeset -i MAX=""

(
echo 985
seq 985
)|while read line
do
    if [ $X -eq 1 ]
    then
        MAX=$line
        X=0 
    else
        typeset -i current=$line
        typeset -i percentage=$current*100/$MAX
        echo $percentage
    fi
done


de subshell () vervangen door je "extract_compressed_fs" commando.

[ Voor 24% gewijzigd door A_L op 22-03-2004 21:58 . Reden: code nu getest op werking. het werkt :) ]


Verwijderd

Heb je "dialog" geinstalleerd?

daarin zit een "guage" control, die kun je gebruiken, daar geef je een max waarde en een current waarde aan mee en dan tekent die een progress balkje in text mode (console)

Overigens is het feit dat het "guage" heet ipv gauge volgens mij "historisch zo gegroeid"

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Verwijderd schreef op 22 maart 2004 @ 22:51:
Heb je "dialog" geinstalleerd?

daarin zit een "guage" control, die kun je gebruiken, daar geef je een max waarde en een current waarde aan mee en dan tekent die een progress balkje in text mode (console)

Overigens is het feit dat het "guage" heet ipv gauge volgens mij "historisch zo gegroeid"
Ik gebruik Xdialog hiervoor en dat is inderdaad de uiteindelijke eindbestemming....
Bij Xdialog noemen ze dit wel gewoon "gauge" en volgens de auteur van Xdialog heet het bij dialog "guage", omdat die auteur dislectisch is... ;)
Maar ik ga nog even de code hierboven bestuderen, alhoewel ik een "while read line" zie, die bij mij (tot nu toe) het proces een vertraging gaf...

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik heb 't !!
Het magische woord bleek "tee" te zijn... hiermee kan je output zowel naar stdout EN naar een file schrijven. (nooit geweten ;))
Voor mensen die ooit met eenzelfde probleem komen te zitten, volgt hier de uiteindelijke code :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TEMP="home/username/dir/test.log"
SOURCE="/home/username/dir/knoppix"
DESTINATION="/home/username/dir/temp.iso"
test_progress ()
{
(
(extract_compressed_fs $SOURCE > $DESTINATION) 2>&1 | \
tr -d Block | awk '{print $1}' | tee $TEMP | sed '1,20d' | grep '0\>' | \
while read BLOCKS; do 
TOTAL=`head -1 $TEMP` 
PERCENT="$((100*$BLOCKS/TOTAL))"; echo $PERCENT; done
) | Xdialog --gauge "Converting to temp.iso..." 10 38
sleep 1; if test -e $DESTINATION; then 
echo "succes"; else echo "failed"; fi
sleep 1; rm -f $DESTINATION; rm -f $TEMP
}


edit:

Om de snelheid erin te houden, doe ik met [ grep '0\>' ] alleen de getallen pakken die op een nul eindigen.

[ Voor 17% gewijzigd door MichielioZ op 23-03-2004 13:35 ]

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

en....

is "while read BLOCKS" significant sneller dan "while read line"? :P

Je gaat nu ook elke keer "head -1 $TEMP" uitvoeren. Is ook een beetje overbodig.

btw.
code:
1
2
if test -e $DESTINATION; then 
echo "succes"; else echo "failed"; fi


kun je ook handig schrijven als :
code:
1
test -e $DESTINATION && echo "success"||echo "failed"

[ Voor 14% gewijzigd door A_L op 23-03-2004 18:25 ]


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
A_L schreef op 23 maart 2004 @ 18:24:
is "while read BLOCKS" significant sneller dan "while read line"? :P

Je gaat nu ook elke keer "head -1 $TEMP" uitvoeren. Is ook een beetje overbodig.
Je hebt gelijk A_L, de "while read line" heb ik toch maar overgenomen, aangezien ik erachter ben gekomen dat dat niet de snelheidsbeperkende factor is ;)
(bepaalde gewoon 'te' veel procentjes)
Bedankt voor de aanwijzingen iig, het maakt m'n code weer wat mooier :)

Iedereen wil terug naar de natuur, maar niemand wil lopend...

Pagina: 1