[bash-scripting] problemen met "progress" van mkisofs

Pagina: 1
Acties:

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik probeer vanuit een bash-script, aangevuld met Xdialog, de output van mkisofs op te vangen. Er hoort hiervoor een manier te zijn met Xdialog (--progress), maar helaas is er hierover op internet nauwelijks nuttige informatie te vinden... :'(
Mijn volgende optie lijkt mij dus om de informatie zelf op te vangen.
Ik heb alleen het gevoel dat ik een beetje op een dood spoor ben geeindigd.
Volgende code heb ik gebruikt :

PERCENTAGE="/home/username/percent.log"
mkisofs -R -U -gui -hide-rr-moved -cache-inodes -no-bak -pad \
/directory_met_files 2>$PERCENTAGE | \
nice -5 create_compressed_fs - 65536 > /directory/file 2>/dev/null | \
tail -f $PERCENT | grep --only-matching **.**%

Met deze code krijg ik op de commandline de output te zien in alleen maar het percentage dat voltooid is.
Als ik echter die laatste output weer in een file wil zetten, krijg ik een lege file :(
Ik heb ook nog geen manier gevonden om hierna uberhaupt iets met de output te kunnen doen.
Is er misschien iemand met een suggestie, of, als het geluk mijn richting op wilt waaien, iemand die met Xdialog een --progress dialog aan de praat heeft gekregen ??

[ Voor 3% gewijzigd door MichielioZ op 18-02-2004 21:28 ]

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


  • _Squatt_
  • Registratie: Oktober 2000
  • Niet online
De documentatie lijkt me redelijk duidelijk. Misschien is de --gauge optie die boven --progress staat ook wel makkelijk.

"He took a duck in the face at two hundred and fifty knots."


  • Wilke
  • Registratie: December 2000
  • Nu online
Even een testding gemaakt omdat ik geen zin heb om daadwerkelijk ISO-fs'en te maken:

code:
1
for counter in `seq 0 100`; do echo $counter.00%; sleep 1; done | Xdialog --progress "Progress..." 0 0


Telt hier prima van 0 naar 100 hoor :)

Ik denk dat als je het deel vanaf de '| Xdialog .....' achter jouw laatste regel (met tail -f etc.) plakt, dat het dan gewoon werkt..probeer maar.

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Sorry mensen, ben er net achter gekomen dat het zowieso niet lukt om een
"tail-f " met meer dan 1 pipe te gebruiken... (heeft met de manier van output te maken geloof ik)
De Xdialog -- progress functie wilt trouwens een "MAX_DOTS" en "MSG_LENGTH" weten, die nergens echt goed staat uitgelegd.. :(
De --gauge functie wil ik via mijn script juist aanroepen, door de output op te vangen. Dus als de standaard output 11.09% geeft, dat ik dat als "eerste" output opvang en daarmee 11 % kan aangeven in mijn --gauge dialog.
Ik zit op dit moment al redelijk "into" het Xdialog-gebeuren, maar de --progress dialog is dus het enige (en belangrijkste) wat ik nog niet begrijp, vandaar dus ook dat ik het met bash en --gauge probeer te ondervangen ;)

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


  • Wilke
  • Registratie: December 2000
  • Nu online
MichielioZ schreef op 19 februari 2004 @ 03:29:
Sorry mensen, ben er net achter gekomen dat het zowieso niet lukt om een
"tail-f " met meer dan 1 pipe te gebruiken... (heeft met de manier van output te maken geloof ik)
Da's onzin, hier werkt het prima
De Xdialog -- progress functie wilt trouwens een "MAX_DOTS" en "MSG_LENGTH" weten, die nergens echt goed staat uitgelegd.. :(
In de link die hierboven al gegeven is staat het anders prima uitgelegd. Bovendien staat daar ook dat 'ie optioneel is, en in jouw geval hoef je hem niet op te geven, aangezien de output al bestaat uit percentages.

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

Ik heb het niet getest maar weet uit eigen ervaring met cdparanoia dat je daar de progressbar ook niet goed kan afvangen omdat er geen enter wordt meegestuurd waardoor grep de regel niet kan afvangen. Bij rippen is dat geen probleem omdat je altijd nog naar de filesize op het filesysteem kan kijken.

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Wilke schreef op 19 februari 2004 @ 10:12:
[...]

Da's onzin, hier werkt het prima

[...]
Sorry Wilke, ik heb het toch zelf echt even opgezocht.. ;)hier staat toch echt dat 2x een een pipe na een tail -f niet werkt door verschil in "buffering". (antwoord komt uit het Unix cookbook)

De Xdialog documentatie over de --progress dialog vindt ik persoonlijk niet erg duidelijk. Mijn scriptje geeft van oorsprong heel veel output, het is dat ik het 2de commando de output naar /dev/null laat sturen, anders heb ik moeite om uberhaupt een procent tussendoor op te sporen :P
De output van mkisofs zelf begint met procenten ja, maar daar komt nog een hoop informatie achter, waardoor de --progress dialog (zonder MAX_DOTS of MSGLENGTH) bij mij op geen mogelijkheid werkt :(
Als ik de documentatie dan nog enigszins begrijp, zou de variabele MAX_DOTS hier wijzen op bijvoorbeeld output van wget (====>), tenzij je ook een MSGLENGTH opgeeft, die dan de lengte van een "dot" moet weergeven, indien er geen "teken", maar iets anders wordt gebruikt... (kan ik en iedereen anders het nog volgen ;) ?)
Denk niet dat ik het nog niet geprobeerd heb op deze manier, maar tot nu toe heb ik dat nog steeds niet aan de praat gekregen... suggesties zijn natuurlijk van harte welkom in deze 8)

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


  • Wilke
  • Registratie: December 2000
  • Nu online
MichielioZ schreef op 19 februari 2004 @ 11:58:
Sorry Wilke, ik heb het toch zelf echt even opgezocht.. ;)hier staat toch echt dat 2x een een pipe na een tail -f niet werkt door verschil in "buffering". (antwoord komt uit het Unix cookbook)
Nou ja, het werkt wel, maar niet meer op de manier zoals 'tail -f' werkt (de output bestaat uit blokken van meerdere KB's), inderdaad. Daar heb je gelijk in (wist ik ook niet idd :) )

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik heb die link die ik net zelf gaf nog eens goed doorgelezen en ik ben er nu dus achter hoe het moet ;) ...
Met de volgende code kan ik dus wel meerdere "pipes" aan "tail -f" toevoegen :

PERCENT="/home/username/percent.log"
mkisofs -R -U -gui -hide-rr-moved -cache-inodes -no-bak -pad \
/directory_met_files 2>$PERCENT | \
nice -5 create_compressed_fs - 65536 > /directory/output-file 2>/dev/null | \
tail -f $PERCENT | \
while read line; do echo $line | grep -o '**.**%' | ???? ; done | \
Xdialog --progress "Progress Dialog..." 0 0

(Met dank aan Wilke en dat "artikel")
Nu moet ik dus enkel en alleen van de output (die nu in 00.00% is) de laatste 3 characters afhalen en Xdialog kan 'm dan hopelijk uitlezen...
Nou weet ik dus alleen niet meer of ik dat met "cut" of "tr -d" kan doen ?!?!
Iemand een suggestie ?

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


  • Wilke
  • Registratie: December 2000
  • Nu online
Hoe ziet je output er nu dan uit? Wat staat er precies op zo'n regel waarin zo'n 00.00% stukje voorkomt?

Als het aantal spaties daarin 'vast' is, kun je met 'cut -d\ -fX' het juiste veld pakken (let op, er moeten 2 spaties na "-d\ ". X is natuurlijk een nummer, het hoeveelste 'veldje' het is.

Als het aantal spaties tussen groepjes variabel is, zoals bv. bij de uitvoer van ls, kun je beter 'awk' gebruiken: awk '{print $X}' print het Xe groepje van tekens, waarbij groepjes door 1 of meer whitespace-tekens gescheiden zijn.

Als het aantal groepjes echt variabel is, moet je een reguliere expressie maken en dan bv. 'sed' er op loslaten. Maar dat zal wel niet nodig zijn.

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Wilke, ik ben dom bezig geweest ;) ..
Ik ben er net achter dat ik gewoon met "tr -d %" (dus de procent-uitgang achter de getallen weghalen) al het gewenste resultaat krijg.
Ik wist niet dat de --progress dialog ook getallen achter de punt meenam..wel dus !
Prachtig om te zien, die progress-bar :*)
Ik heb voor het kopieren van files al een manier gevonden om hetzelfde te doen, maar die is wat omslachtig. Mocht hier iemand toevallig nog een simpelere manier voor weten, dan zou ik die ook graag weten.
Iig bedankt voor de hulp tot nu toe. 8)

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


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Kan ook met named pipes:

code:
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#named pipe aanmaken
rm -rf pipe
mkfifo pipe

mkisofs -veelopties  /files/ >x.iso 2>./pipe&
while read line
do
   echo "${line:0:1}" #alleen eerste teken
done<./pipe | dialog --title "GAUGE" --gauge "Hi, this is a gauge widget" 20 70 0
Ik heb hier geen Xdialog maar werkt ongeveer het zelfde denk ik.

Als je het percentage uit de output wilt halen kun je handiger parameter-expansions van bash gebruiken. Bijvoorbeeld ${line:0:4} om het percentage met 2 achter de komma te achterhalen (substring).

[ Voor 6% gewijzigd door A_L op 19-02-2004 17:46 . Reden: typo ]

Pagina: 1