Mejsla ut ”progress-%” från terminalprogram
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Mejsla ut ”progress-%” från terminalprogram
Att jag krånglar till saker beror väl på att jag är den ständige nybörjaren. Jag verkar inte kunna ta till mig ”tänket”… Är väl för gammal, helt enkelt; svårt att lära en gammal hund att sitta.
Experimenterade med returvärden igår en del men fick ingen skillnad på om jag testade med en flac-fil som jag vet fungerar eller om jag testade med en vanlig textfil, som rimligtvis borde orsaka ett regn av felmeddelanden.
Men jag ska testa lite till.
Experimenterade med returvärden igår en del men fick ingen skillnad på om jag testade med en flac-fil som jag vet fungerar eller om jag testade med en vanlig textfil, som rimligtvis borde orsaka ett regn av felmeddelanden.
Men jag ska testa lite till.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Mejsla ut ”progress-%” från terminalprogram
Har testat lite nu, men får inte till det med enbart returvärde. Vet ju inte heller vilket returvärde jag får; är det returvärdet från flac eller från zenity? För sett ur zenitys perspektiv blir det ju inte fel även om jag försöker köra ”flac -t” på en textfil, så att säga.Johnny Rosenberg skrev:Att jag krånglar till saker beror väl på att jag är den ständige nybörjaren. Jag verkar inte kunna ta till mig ”tänket”… Är väl för gammal, helt enkelt; svårt att lära en gammal hund att sitta.
Experimenterade med returvärden igår en del men fick ingen skillnad på om jag testade med en flac-fil som jag vet fungerar eller om jag testade med en vanlig textfil, som rimligtvis borde orsaka ett regn av felmeddelanden.
Men jag ska testa lite till.
Jag har nu testat att sätta kommantot i en if-sats, men vilka filer jag än väljer så kör den bara på som om allt vore OK, dock hinner aldrig förloppsindikatorn visas (använder ”--auto-close” så att rutan stängs automatiskt) om jag kör med ogiltiga filer.
Har även testat med att skriva ut $? direkt efter kommandot, men den visar glatt 0 vad jag än väljer för tokiga filer.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Mejsla ut ”progress-%” från terminalprogram
Det var i första hand returvärdet från flac jag syftade på. När det gäller zenity så talar det returvärdet bara om ifall du tryckt på OK eller Avbryt. Men det kan ju å andra sidan vara intressant att faktiskt lyda och avbryta om någon trycker på Avbryt och inte bara fortstätta utan vidare.Johnny Rosenberg skrev:Har testat lite nu, men får inte till det med enbart returvärde. Vet ju inte heller vilket returvärde jag får; är det returvärdet från flac eller från zenity? För sett ur zenitys perspektiv blir det ju inte fel även om jag försöker köra ”flac -t” på en textfil, så att säga.
Det känns som att du vill ha mer kontroll över vad som faktsikt händer. Jag tror att du kommer känna dig bekvämare om vi skippar externa hjälpmedel och istället låter bash hantera utdatan helt på egen hand. Jag tänker mig något i stil med while read eller motsvarande. Jag ska se om jag kan få ihop något åt det hållet lite senare när jag har ätit.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Mejsla ut ”progress-%” från terminalprogram
Vad räknar du som ”externa hjälpmedel”?Konservburk skrev:Jag tror att du kommer känna dig bekvämare om vi skippar externa hjälpmedel och istället låter bash hantera utdatan helt på egen hand.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Mejsla ut ”progress-%” från terminalprogram
Kommandon som inte är inbyggda i bash. I de tidigere försöken har vi använt stdbuf, tr, xargs, sed. Om du är osäker på om ett kommando är externt eller inbyggt så kan du ta reda på det så här:Johnny Rosenberg skrev:Vad räknar du som ”externa hjälpmedel”?Konservburk skrev:Jag tror att du kommer känna dig bekvämare om vi skippar externa hjälpmedel och istället låter bash hantera utdatan helt på egen hand.
Kod: Markera allt
type kommando
När jag säger utan externa hjälpmedel så bortser jag förstås från flac och zenity som är källan respektive sänkan, dvs det vi får utdata ifrån och det vi ska skicka indata till.
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Mejsla ut ”progress-%” från terminalprogram
Testade med ”echo” och den svarade faktiskt på svenska: ”echo är inbyggt i skalet”.Konservburk skrev:Kommandon som inte är inbyggda i bash. I de tidigere försöken har vi använt stdbuf, tr, xargs, sed. Om du är osäker på om ett kommando är externt eller inbyggt så kan du ta reda på det så här:Johnny Rosenberg skrev:Vad räknar du som ”externa hjälpmedel”?Konservburk skrev:Jag tror att du kommer känna dig bekvämare om vi skippar externa hjälpmedel och istället låter bash hantera utdatan helt på egen hand.
Svarar den kommando is a shell builtin så är det inbyggt och svarar den med en sökväg så är det externt.Kod: Markera allt
type kommando
Precis. Kanske väl avancerat att skriva ett rent bash-skript för att analysera en FLAC-fil, så jag håller med om att programmet flac nog är något som är svårt att vara utan i just detta fallet…Konservburk skrev:När jag säger utan externa hjälpmedel så bortser jag förstås från flac och zenity som är källan respektive sänkan, dvs det vi får utdata ifrån och det vi ska skicka indata till.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Mejsla ut ”progress-%” från terminalprogram
Det blev så här tillslut:
Det visade sig bli ett ganska intressant exempel med både ett par nyare bash-grejer och dessutom ett ställe där det för en gångs skull inte ska vara citat-tecken runt en variabel.
Kod: Markera allt
#!/bin/bash
unset line
2>&1 flac -t filnamn.flac |
while
IFS=
read -rN1 char ||
! ${line+false}
do case "$char" in
$'\b'|$'\n'|$'\r'|'')
if [[ "$line" =~ ": " ]]
then
line="${line##*: }"
[[ "$line" =~ [[:digit:]]+ ]] &&
echo "$BASH_REMATCH"
echo "#${line^}"
fi
unset line
continue
esac
line="$line$char"
done |
zenity --progress &&
(exit "$PIPESTATUS") || exit
- Johnny Rosenberg
- Inlägg: 1256
- Blev medlem: 23 jun 2007, 16:18
- OS: Ubuntu
- Utgåva: 22.10 Kinetic Kudu
- Kontakt:
Re: Mejsla ut ”progress-%” från terminalprogram
Spännande. Ska ta mig en närmare titt på det imorgon – ska sova nu så att jag orkar upp vid 5.Konservburk skrev:Det blev så här tillslut:
Det visade sig bli ett ganska intressant exempel med både ett par nyare bash-grejer och dessutom ett ställe där det för en gångs skull inte ska vara citat-tecken runt en variabel.Kod: Markera allt
#!/bin/bash unset line 2>&1 flac -t filnamn.flac | while IFS= read -rN1 char || ! ${line+false} do case "$char" in $'\b'|$'\n'|$'\r'|'') if [[ "$line" =~ ": " ]] then line="${line##*: }" [[ "$line" =~ [[:digit:]]+ ]] && echo "$BASH_REMATCH" echo "#${line^}" fi unset line continue esac line="$line$char" done | zenity --progress && (exit "$PIPESTATUS") || exit
Märkte du någon skillnad i hastighet mot den tidigare enrads-lösningen? Om du nu testat, vill säga…
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Mejsla ut ”progress-%” från terminalprogram
Den var inte långsammare iaf, snarare snabbare om något. Men det är ju fortfarande flac som är hastighetsbegränsaren, och det går förstås inte att komma runt.Johnny Rosenberg skrev:Märkte du någon skillnad i hastighet mot den tidigare enrads-lösningen? Om du nu testat, vill säga…