Sida 1 av 2

Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 14:26
av Johnny Rosenberg
Har nu försökt ”allt” men inte lyckats.

Mitt mål är att ha en fungerande grafisk ”progress bar” som följer de siffror som ett visst terminalprogram spottar ur sig. Terminalprogrammet heter ”flac” och finns väl inte som standard i Ubuntu, men kan installeras från programcentralen eller med:

Kod: Markera allt

sudo apt-get install flac
Som ”progress bar” använder jag zenity --progress-bar, men än så länge har jag inte ens kommit så långt så att jag har blandat in zenity.

Vad man brukar göra är tydligen, enligt vad jag funnit på nätet, att man spottar ur sig siffror och sedan gör en pipe till zenity, som då använder dessa siffror för att visa förloppet. Här är lite kod jag hittade som visar hur man kan göra:

Kod: Markera allt

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Uppdaterar e-postloggar" ; sleep 1
echo "20" ; sleep 1
echo "# Nollställer cron-jobb" ; sleep 1
echo "50" ; sleep 1
echo "Den här raden kommer att ignoreras" ; sleep 1
echo "75" ; sleep 1
echo "# Startar om systemet" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
	--title="Uppdaterar systemloggar" \
	--text="Söker av e-postloggarna..." \
	--percentage=0
Det sista där, ”--percentage=0”, är bara startvärdet på stapeln. Kan bli lite förvirrande om man tror något annat…

Så programmet jag vill köra kräver ju först och främst att man har en giltig FLAC-fil och om sådan saknas kan man ju låna en av mig här, spara den bara på disken och undvik gärna att lyssna på den.

%-siffrorna, tillsammans med en massa oönskat skräp, får man ut i terminalen om man skriver

Kod: Markera allt

flac -t Filnamn
Filnamn är själva FLAC-filen. Problemet är bara att få ut endast siffrorna och inget annat. Det närmaste jag kommit hittills var att få ut hela raden till en fil med:

Kod: Markera allt

flac -ct Filnamn 2>flactest
Filen ”flactest” såg då ut så här:
flac 1.2.1, Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson
flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions. Type `flac' for details.

Filnamn: testing, 27% complete
Filnamn: testing, 54% complete
Filnamn: testing, 82% complete
Filnamn: ok
Har försökt på olika sätt, bland annat med grep, att bara få ut raderna med %-siffrorna, men inget har lyckats hittills. De ska ju komma ut i realtid också, det duger ju alltså inte att först omdirigera till en fil och därefter fixa resten från filen, för då är det ju redan för sent, så att säga.

Vad jag har provat med hittills är ju olika kombinationer av omdirigering och grep, men det känns inte som att den vägen är framkomlig, i alla fall inte för mig just nu…

Tacksam för alla som helst tänkbara tips och idéer.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 20:09
av Konservburk
Johnny Rosenberg skrev:Det närmaste jag kommit hittills var att få ut hela raden till en fil med:

Kod: Markera allt

flac -ct Filnamn 2>flactest
Filen ”flactest” såg då ut så här:
flac 1.2.1, Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson
flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions. Type `flac' for details.

Filnamn: testing, 27% complete
Filnamn: testing, 54% complete
Filnamn: testing, 82% complete
Filnamn: ok
Om filen verkligen ser ut precis så där så borde det ju gå med grep eller sed eller awk eller motsvarande.

Eftersom det tydligen inte går så misstänker jag att svårigheten du har stött på kommer av kontrolltecken som används för att styra var i terminalen utdatan hamnar. Det brukar åtminstone finnas inbakat sådana i utdatan när terminalprogram räknar upp hur långt de har hunnit med vad det nu är de ska göra. Jag antar att flac inte är något undantag.

Det går förstås att ta sig runt om man vet vilka kontrolltecken det rör sig om och var i utdatan dessa finns. Så mitt tips är att undersöka utdata-filen lite noggrannare.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 20:43
av m!rage
Det handlar om ^H, alltså backspace-koden om jag inte har fel. Öppna utfilen i nano så får du se. Jag har lekt lite men även jag kört fast. Detta har jag kommit fram till:

Kod: Markera allt

$ flac -t 07.\ Rock\ Nuts.flac 2>&1 | egrep -o '[0-9]*%' 
4%
9%
13%
18%
22%
27%
31%
36%
40%
45%
49%
54%
58%
63%
67%
72%
All utdata kommer dock efter att flac avslutats, så det har man inte mycket nytta av. Hämtningen av din fil avbröts av någon anledning vid 72%, därför stannar flac där.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 21:35
av Johnny Rosenberg
m!rage skrev:Det handlar om ^H, alltså backspace-koden om jag inte har fel. Öppna utfilen i nano så får du se. Jag har lekt lite men även jag kört fast. Detta har jag kommit fram till:

Kod: Markera allt

$ flac -t 07.\ Rock\ Nuts.flac 2>&1 | egrep -o '[0-9]*%' 
4%
9%
13%
18%
22%
27%
31%
36%
40%
45%
49%
54%
58%
63%
67%
72%
All utdata kommer dock efter att flac avslutats, så det har man inte mycket nytta av. Hämtningen av din fil avbröts av någon anledning vid 72%, därför stannar flac där.
Märkligt. Jag testade med grep (dock ej egrep) men fick inget resultat alls… men då använde jag inte -o, men jag kan inte se att utelämnandet av den inte skulle ge något svar alls (förutom ”07. Rock Nuts.flac: ok” – ett svar som jag inte får med -o). Ser inte riktigt logiken, men det har kanske med styrtecknen att göra…

Märkligt att hämtningen avbröts vid 72% förresten. Kanske var något tillfälligt? Men detta är nog första gången jag hivar iväg en Ubuntu One-länk någonstans, så jag har inga erfarenheter om hur pålitligt det är.

Att den väntar med att räkna upp tills flacs jobb är avklarat borde väl bero på att grep kanske buffrar på något sätt. Har kollat lite i grep-dokumentationen, men inte hittat något bot mot det. I sed däremot, finns ju -u-flaggan, men jag lyckas inte få till det med enbart sed, utan det är först när grep -o (får samma resultat med den som med egrep -o) som sed börjar leverera. Använder då sed för att bli av med %-tecknet… Vet inte riktigt hur man klarar det med enbart grep (eller egrep).

Har nu testat ytterligare och funnit att zenity --progress inte störs av %-tecknen, så sed behövs alltså inte, så problemet nu är ju bara att grep spottar ur sig data i efterhand, så att säga.

Funderade tidigare också lite på varför jag bara fick 3 olika procentsatser tidigare i filen som jag dirigerade om till. Vet nu varför…

Har nämligen kollat vad som verkligen finns i filen, och det förekommer betydligt fler procentsatser än bara 3, kan jag säga. Mellan dem är det ett gäng '\x08', vilket enligt teckentabellen är Backspace, precis som sagts innan. Använde själv ghex2 för att se det, men finner nu också att det syns även i gedit:

Kod: Markera allt

Bobby.flac: testing, 3% complete
Bobby.flac: testing, 7% complete
Bobby.flac: testing, 10% complete
Bobby.flac: testing, 14% complete
Bobby.flac: testing, 17% complete
Bobby.flac: testing, 20% complete
Bobby.flac: testing, 24% complete
Bobby.flac: testing, 27% complete
Bobby.flac: testing, 31% complete
Bobby.flac: testing, 34% complete
Bobby.flac: testing, 37% complete
Bobby.flac: testing, 41% complete
Bobby.flac: testing, 44% complete
Bobby.flac: testing, 48% complete
Bobby.flac: testing, 51% complete
Bobby.flac: testing, 54% complete
Bobby.flac: testing, 58% complete
Bobby.flac: testing, 61% complete
Bobby.flac: testing, 65% complete
Bobby.flac: testing, 68% complete
Bobby.flac: testing, 71% complete
Bobby.flac: testing, 75% complete
Bobby.flac: testing, 78% complete
Bobby.flac: testing, 82% complete
Bobby.flac: testing, 85% complete
Bobby.flac: testing, 88% complete
Bobby.flac: testing, 92% complete
Bobby.flac: testing, 95% complete
Bobby.flac: testing, 99% complete

Bobby.flac: ok
Radbrytningarna efter ordet ”complete” har jag gjort manuellt här, annars hade det varit svårläst eftersom allt hade hamnat på samma rad.

Förra gången jag klistrade in filen här utgick jag från terminalen och ”more filnamn” (ja, jag vet att alla andra använder ”less”, men jag är en gammal gubbe… snart i alla fall). Rutorna ovan är i alla fall Backspace.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 22:02
av Johnny Rosenberg
Hm… tittade igenom filen i ghex2 igen och tror mig nu veta varför det inte fungerar med de kommandon jag försökte, nämligen att under hela %-uppräkningen förekommer inte ett enda \x0A eller \x0D och både sed och grep är väl radbaserade, eller? Att det trots allt gick med grep -o kan ju ändå vara lite smålogiskt eftersom -o betyder att den ska slänga ur sig bara det som matchar mönstret. Det verkar alltså som att grep -o själv lägger dit sina radbrytningar, för inte finns de med i originalströmmen i alla fall.

Och detta förklarar också varför inte --line-buffered fungerar; det är ju bara en enda lång rad…

Skulle man kunna komma runt problemet genom att själv lägga dit radbrytningar efter varje %-tecken, exempelvis?

Ska testa lite…

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 22:10
av Johnny Rosenberg
Nej, fick det ändå inte att fungera… Försökte först med sed att byta ut alla %-tecken mot \n, men det verkar inte som att det blev något byte alls, för alla %-tecken var kvar efter bytet. Troligen jag som gjort något fel som vanligt:

Kod: Markera allt

flac -t 07.\ Rock\ Nuts.flac 2>&1 | sed -u 's/%/\n/' | grep --line-buffered -o '[0-9]*%'
Provade även med ”\%” istället för bara ”%” med med samma resultat, det vill säga %-tecknen var kvar och resultatet verkade buffrat.

Andra idéer? Ge upp…? ;D :( >:(

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 22:23
av Konservburk
Jag har hämtat källkoden till flac via apt-get source flac och ser då att det där med backspace-tecken verkar inte vara något att lita på. Så här ser den intressanta kodsnutten ut:

Kod: Markera allt

			fprintf(stderr, "\r%s: %s%u%% complete",
				decoder_session->inbasefilename,
				decoder_session->test_only? "testing, " : decoder_session->analysis_mode? "analyzing, " : "",
				(unsigned)floor(progress + 0.5)
			);
För den som inte är hemma på C-kod så kan jag meddela att den något otippat skriver ut carriage return och inte backspace. Det gav mig ganska mycket huvudbry innan jag hittade filen
debian/patches/03_cosmetic_flac_stats.dpatch:

Kod: Markera allt

#! /bin/sh /usr/share/dpatch/dpatch-run
## 03_cosmetic_flac_stats.dpatch by Joshua Kwan <joshk@triplehelix.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Fix misuse of \r (potentially) in flac -d or -t output, closes: #138828

@DPATCH@
--- flac-1.1.2/src/flac/decode.c~	2005-08-18 02:16:46.000000000 -0700
+++ flac-1.1.2/src/flac/decode.c	2005-08-18 02:14:59.000000000 -0700
@@ -1182,6 +1182,7 @@
 
 void print_stats(const DecoderSession *decoder_session)
 {
+	static int count = 0;
 	if(flac__utils_verbosity_ >= 2) {
 #if defined _MSC_VER || defined __MINGW32__
 		/* with MSVC you have to spoon feed it the casting */
@@ -1190,7 +1191,13 @@
 		const double progress = (double)decoder_session->samples_processed / (double)decoder_session->total_samples * 100.0;
 #endif
 		if(decoder_session->total_samples > 0) {
-			fprintf(stderr, "\r%s: %s%u%% complete",
+			while (count > 0 && count--)
+				fprintf(stderr, "\b");
+
+			if ((unsigned)floor(progress + 0.5) == 100)
+				return;
+			
+			count = fprintf(stderr, "%s: %s%u%% complete",
 				decoder_session->inbasefilename,
 				decoder_session->test_only? "testing, " : decoder_session->analysis_mode? "analyzing, " : "",
 				(unsigned)floor(progress + 0.5)
Det verkar vara så att debian, och följakligen även ubuntu, har en patchad version av flac som använder backspace, till skillnad från standardversionen av flac som använder carriage return. Det har tydligen med den här buggrapporten att göra:

http://bugs.debian.org/cgi-bin/bugrepor ... ug=138828+

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 22:32
av Konservburk
Johnny Rosenberg skrev:Hm… tittade igenom filen i ghex2 igen och tror mig nu veta varför det inte fungerar med de kommandon jag försökte, nämligen att under hela %-uppräkningen förekommer inte ett enda \x0A eller \x0D och både sed och grep är väl radbaserade, eller?
Standard-versionen av flac har \x0D vid varje uppräkningssteg, vilket jag tog upp i mitt förra inlägg. Men det det hjälper egentligen inte eftersom grep och sed bara bryr sig om \x0A som radavdelare.
Johnny Rosenberg skrev:Skulle man kunna komma runt problemet genom att själv lägga dit radbrytningar efter varje %-tecken, exempelvis?
Det borde väl gå bra tycker jag. Ska testa själv om en stund.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 23:06
av Konservburk
Sådär, nu har jag gjort ett försök, och det verkar fungera som jag tänkt mig:

Kod: Markera allt

flac -t filnamn.flac 2>&1 |
stdbuf -o0 tr '\b\r' '\n' |
stdbuf -o0 sed -n 's/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p' |
zenity --progress

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 23:46
av Johnny Rosenberg
Konservburk skrev:Sådär, nu har jag gjort ett försök, och det verkar fungera som jag tänkt mig:

Kod: Markera allt

flac -t filnamn.flac 2>&1 |
stdbuf -o0 tr '\b\r' '\n' |
stdbuf -o0 sed -n 's/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p' |
zenity --progress
Vad måste jag installera för att stdbuf ska existera på min dator?

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 23:57
av Konservburk
Johnny Rosenberg skrev:Vad måste jag installera för att stdbuf ska existera på min dator?
Det är en del av nya coreutils från version 7.5 och framåt. Jag antar att du kör LTS som bara har corutils-7.4?

Jag ska fundera lite och se om jag kan klara av det här utan stdbuf. Det är alltid kul med en utmaning. :)

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 21 nov 2010, 23:59
av Johnny Rosenberg
Johnny Rosenberg skrev:
Konservburk skrev:Sådär, nu har jag gjort ett försök, och det verkar fungera som jag tänkt mig:

Kod: Markera allt

flac -t filnamn.flac 2>&1 |
stdbuf -o0 tr '\b\r' '\n' |
stdbuf -o0 sed -n 's/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p' |
zenity --progress
Vad måste jag installera för att stdbuf ska existera på min dator?
Hittade svaret: Ingår i Coreutils – på min andra dator, men inte på denna. Skillnad: Min andra dator har Ubuntu 10.10 medan denna har Ubuntu 10.04. Ännu en anledning att uppgradera alltså… något jag ändå hade tänkt att göra i helgen, men det blev inte av…

Nåja, då har jag något att göra imorgon efter jobbet då…

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 22 nov 2010, 00:01
av Johnny Rosenberg
Konservburk skrev:
Johnny Rosenberg skrev:Vad måste jag installera för att stdbuf ska existera på min dator?
Det är en del av nya coreutils från version 7.5 och framåt. Jag antar att du kör LTS som bara har corutils-7.4?

Jag ska fundera lite och se om jag kan klara av det här utan stdbuf. Det är alltid kul med en utmaning. :)
Oj, du hann skriva innan jag hann skicka det förra…

Okej, jag är i vilket fall i vilket fall som helst imponerad. Bara att känna till att det finns något som heter ”stdbuf” imponerar på mig… ;D

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 22 nov 2010, 00:17
av Konservburk
Ett första försök utan stdbuf:

Kod: Markera allt

flac -t filnamn.flac 2>&1 |
xargs -n1 -d'\b' sh -c '
   echo "$0" | sed -n "s/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p"
' | zenity --progress
Jag har ännu inte kommit på något enkelt sätt att klara av både carriage return och backspace på en gång, så det fick bli bara backspace, åtminstone tills vidare.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 22 nov 2010, 19:51
av Johnny Rosenberg
Konservburk skrev:Ett första försök utan stdbuf:

Kod: Markera allt

flac -t filnamn.flac 2>&1 |
xargs -n1 -d'\b' sh -c '
   echo "$0" | sed -n "s/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p"
' | zenity --progress
Jag har ännu inte kommit på något enkelt sätt att klara av både carriage return och backspace på en gång, så det fick bli bara backspace, åtminstone tills vidare.
Japp, det fungerade. Petig som jag är så störde jag mig givetvis på att texten ovanför den liggande stapeln är i gemener, men det var ju enkelt att fixa.

Har försökt att förstå vad det är som händer och det mesta köper jag, men jag skulle gärna vilja ha en liten förtydligande förklaring av xargs-sh-biten om det går bra. Givetvis har jag kollat man-sidorna och jag förstår vad ”-d'\b'” gör, men sedan känns det inte som att jag har riktig järnkoll på vad som händer.

Exempelvis när det gäller ”man xargs” så förstår jag inte riktigt vad de menar med sin beskrivning av ”-n”. Vad då ”max-args”? Provade också med ”-l1” och det fungerade, det också. Däremot inte ”-s1”, men det var kanske inte så väntat heller.

Har försökt att ta bort vissa saker och se vad det blir för skillnad, men har då fått svårtolkade resultat… Det är lite som när man ska göra mätningar i en elektronisk krets som är så känslig att den påverkas av mätinstrumentet; man vet inte riktig vad man gör…

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 22 nov 2010, 20:05
av Johnny Rosenberg
Hm… glömde ju en grej också, nämligen det viktigaste… Varför testar man något? Jo, för att se om det man testar är OK. Så anta att jag har en fil som inte är OK eller som inte ens är en FLAC-fil, då vill jag ju ha någon form av felmeddelande och sedan ska ju skriptet avslutas, känns ju rimligt. Det gick ju bra att göra så länge jag inte hade någon förloppsindikator (eller vad en progress bar nu ska kallas på svenska). Känns lite som att man vill äta kakan och ha den kvar…

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 22 nov 2010, 20:46
av Konservburk
Johnny Rosenberg skrev:Har försökt att förstå vad det är som händer och det mesta köper jag, men jag skulle gärna vilja ha en liten förtydligande förklaring av xargs-sh-biten om det går bra. Givetvis har jag kollat man-sidorna och jag förstår vad ”-d'\b'” gör, men sedan känns det inte som att jag har riktig järnkoll på vad som händer.

Exempelvis när det gäller ”man xargs” så förstår jag inte riktigt vad de menar med sin beskrivning av ”-n”. Vad då ”max-args”? Provade också med ”-l1” och det fungerade, det också. Däremot inte ”-s1”, men det var kanske inte så väntat heller.
Det xargs gör är att dela upp det som kommer på stdin i ord för att sedan köra det givna kommandot med dessa ord som argument. Här kommer xargs att dela upp indatan i tre ord; a, b, c och sedan köra kommandot echo foo a b c:

Kod: Markera allt

$ printf "a b\nc" | xargs echo foo
foo a b c
Men flaggan -n1 så körs kommandot flera gånger istället med de olika orden som det enda argumentet i tur och ordning:

Kod: Markera allt

$ printf "a b\nc" | xargs -n1 echo foo
foo a
foo b
foo c
Med flaggan -l1 så körs kommandot på nytt efter varje nyrad i indatan:

Kod: Markera allt

$ printf "a b\nc" | xargs -l1 echo foo
foo a b
foo c
I vårt fall har själva kommandot som xargs ska köra varit:

Kod: Markera allt

sh -c 'echo "$0" | sed -n "s/.*:\s\(testing,\s\([^:]*\)\|[^:]*\)$/#\1\n\2/p"' argument
Argumentet blir då vad som finns mellan två backspace eftersom vi har valt det tecknet som avdelare. I det inre skriptet dyker sedan detta argument upp som "$0" som vi genast skickar genom sed.

Här är ett enklare exempel som fungerar på samma sätt:

Kod: Markera allt

$ sh -c 'echo "[$0]"' hejsan
[hejsan]

Re: Mejsla ut ”progress-%” från terminalprogram [50 % löst…]

Postat: 23 nov 2010, 16:16
av Johnny Rosenberg
Johnny Rosenberg skrev:Hm… glömde ju en grej också, nämligen det viktigaste… Varför testar man något? Jo, för att se om det man testar är OK. Så anta att jag har en fil som inte är OK eller som inte ens är en FLAC-fil, då vill jag ju ha någon form av felmeddelande och sedan ska ju skriptet avslutas, känns ju rimligt. Det gick ju bra att göra så länge jag inte hade någon förloppsindikator (eller vad en progress bar nu ska kallas på svenska). Känns lite som att man vill äta kakan och ha den kvar…
Ser nu att frågan är lite kryptiskt ställd, så det var nog ingen som förstod att det var en fråga över huvud taget…

Vad jag egentligen undrade var nog om man kan omdirigera till två ställen samtidigt, alltså dels till det här förloppsindikator-köret och dels till en fil, så att jag i efterhand kan söka igenom filen efter ordet "error" och på så vis få reda på om testet gick igenom eller inte.

Re: Mejsla ut ”progress-%” från terminalprogram

Postat: 23 nov 2010, 16:18
av m!rage

Kod: Markera allt

tee foo
skickar text från stdin till stdout och skriver samtidigt till filen foo

Re: Mejsla ut ”progress-%” från terminalprogram [50 % löst…]

Postat: 23 nov 2010, 16:21
av Konservburk
Johnny Rosenberg skrev:
Johnny Rosenberg skrev:Hm… glömde ju en grej också, nämligen det viktigaste… Varför testar man något? Jo, för att se om det man testar är OK. Så anta att jag har en fil som inte är OK eller som inte ens är en FLAC-fil, då vill jag ju ha någon form av felmeddelande och sedan ska ju skriptet avslutas, känns ju rimligt. Det gick ju bra att göra så länge jag inte hade någon förloppsindikator (eller vad en progress bar nu ska kallas på svenska). Känns lite som att man vill äta kakan och ha den kvar…
Ser nu att frågan är lite kryptiskt ställd, så det var nog ingen som förstod att det var en fråga över huvud taget…

Vad jag egentligen undrade var nog om man kan omdirigera till två ställen samtidigt, alltså dels till det här förloppsindikator-köret och dels till en fil, så att jag i efterhand kan söka igenom filen efter ordet "error" och på så vis få reda på om testet gick igenom eller inte.
Det är som sagt kommandot tee som används för att omdirigera samma sak till flera ställen. Men jag är inte riktigt med på varför du ska krånga till det på ett sånt sätt? Räcker det inte att skriptet tittar på returvärdet samtidigt som zenity får ta hand om utdatan?