Time your shell script operations

This is a note to self (so I don’t forgot about it) – it is not rocket science 😉

If you need to check how long it takes to run part of your bash script you can use the use PS4 trick, as explained partially here, but it is a bit messy and I don’t like to do the math by hand 😛

In order to test the performance bottleneck of one of my shell scripts I draft a small set of functions.
One to start the clock ticking, another to check how long it passed since the last mark and another to reset the clock.

You can download/copy into a file of your choice and then source it inside your script. The output is the nanoseconds passed between operations. If you make (any) use of it please let me know. I don’t think it will blow up your computer, but you’re at your own risk 😉

#######################################
# Bruno Lucas – v1.0 – 2012/10/22 #
#######################################
TIME_TICKER=0

echoerr() { echo -e “$@” 1>&2; }

function time_start()
{

TIME_TICKER=`date “+%s%N”`

}

#You can pass a message delimited by single quoted
function time_mark()
{

CURR=`date +%s%N`
DIFF=`echo “$CURR – $TIME_TICKER” | bc`
echoerr “$DIFF\t$1”
TIME_TICKER=$CURR

}

function time_reset()
{

TIME_TICKER=0

}

To use:

source timer.sh

time_start

some_op_of_mine 1 2 3 4

time_mark ‘After x’

and you’ll get something like ‘13789137   After x’ telling the elapsed time.

PS: The echoerr function was stolen from here, it echos the content to STDERR, instead of STDOUT.

PS1: Copy/paste from HTML can sometimes come with errors, always check the source code prior to execution.

 

facebooktwittergoogle_plusredditpinterestlinkedinmail
Posted in Linux, Tech. Tags: , , , , . No Comments »
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Pub.

Salvar stream/programa do site da RTP

Por vezes quero ver offline (longe do browser e na TV via XBMC) algum programa da RTP. Para tal dei um olhinho ao HTML da página e pedi ajuda à minha amiga bash.

#!/bin/bash

URL=”$1″
PAGE=`wget -c “$URL” -O -`
START=`echo “$PAGE” | grep ‘addVariable(“streamer”‘ | cut -f4 -d'”‘`
END=`echo “$PAGE” | grep ‘addVariable(“file”‘ | cut -f4 -d'”‘ `
FILE=`echo $START/$END`
OUT=`basename $FILE`
mplayer “$FILE” -dumpstream -dumpfile “$OUT”

Para além das coisas normais de Linux (e Unix) usa o mplayer para salvar a stream. Podem salvar o código bnm ficheiro, dar-lhe permissões de execução e invocar com o URL da página da RTP em questão.
Funciona com os programas que testei 😛 (Jan 2012) – como se sabe estas coisas vão funcionado até que alguém do lado de lá se lembre de mudar a página 🙂

facebooktwittergoogle_plusredditpinterestlinkedinmail
Posted in Linux, Tutorial. Tags: , , , . No Comments »
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Pub.

Bash, Ficheiros e Extensões

Alguns truques de bash úteis (e post para eu me lembrar deles):

FICH=”/home/bruno/abc.txt”

FICH_SEM_DIR=`basename $FICH`
echo “O ficheiro sem o caminho absoluto e’ $FICH_SEM_DIR “#abc.txt

NOME_FICH=${FICH_SEM_DIR%.*}
echo “O ficheiro sem o caminho absoluto e sem extensao e’ $NOME_FICH ” #abc

EXTENSAO_DO_FICH=${FICH_SEM_DIR#*.}
echo “A extensao do ficheiro e’ $EXTENSAO_DO_FICH “#txt

#se soubermos a priori a extensão do ficheiro é mais simples

FICH_SEM_DIR_SEM_EXTENSAO=`basename $FICH .txt`
echo “O ficheiro sem o caminho absoluto e sem extensao e’ $FICH_SEM_DIR_SEM_EXTENSAO “#abc

facebooktwittergoogle_plusredditpinterestlinkedinmail
Posted in Linux. Tags: , , . No Comments »
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Pub.

Debuging em Shell Script

Quando se está a fazer um shell script, às vezes (quase sempre?), nem tudo correr como esperado. Para saber o que o script está mesmo a fazer, costumo invoca-lo assim:

sh -x nome_do_script.sh

O-x faz com que todos os comandos sejam impressos no ecrã (atenção para o stderr) antes de serem executados.

Os comandos executados aparecem como: + comando

facebooktwittergoogle_plusredditpinterestlinkedinmail
Posted in Linux. Tags: , , , , . 6 Comments »
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...