socat, sert de proxy et passe le plat...

2013-12-26 | #commande #socat

Sur un de mes projets, un flux a été interrompu… en attendant sa réouverture j’utilise un proxy qui sert de passe plat depuis une machine où le flux en question est ouvert… # le serveur écoute sur le port 1231 et passe le plat à somewhere.example.com:80 socat TCP-LISTEN:1231,reuseaddr,fork TCP:somewhere.example.com:80

Continuer la lecture 


bash, la fonction qui tue...

2013-12-07

Voici une fonction qui tue… et simplifie la vie en ligne de commandes ! function ..() { ## .. <nombre> remonte de <nombre> repertoires ## .. /<chaine> remonte jusqu'a ce qu'un repertoire contient <chaine> dans son nom local level=$1 if [[ ! "$level" =~ / ]]; then while [ $level -gt 0 ]; do cd .. || break level=$(($level-1)) done else level=${level:1} local curdir=$(pwd) IFS='/' read -ra ADDR <<< "$curdir" for (( i = ${#ADDR[@]}-1; i>0; i-- )); do if [[ "${ADDR[$i]}" =~ "$level" ]]; then break fi cd .

Continuer la lecture 


bash, éviter l'interprétation en octal en utilisant printf

2013-12-07

J’ai eu un petit soucis dans un script de renommage qui tentait d’interprêter les valeurs commençant par 08 et 09 en octal lors d’un printf. La solution consiste à spécifier que la valeur est en base 10 comme dans l’exemple ci-dessous : s="09" $ printf "%.02d" $s bash: printf: 09: Nombre octal non valable 00 $ printf "%.02d" $(( 10#$s)) 09

Continuer la lecture 


bash, expansion de paramètres et indirection

2013-11-15

Aujourd’hui, je viens de découvrir l’indirection de paramètres en bash. La syntaxe est la suivante : ${!PARAMETER} L’expansion ne donne pas la valeur du paramètre lui même mais la valeur du paramètre dont le nom est contenu dans PARAMETER. $ TEMP="hello world" $ TEXT=TEMP $ echo ${!TEXT} hello world Cela permet de faire de jolies choses comme ceci en s’abstrayant d’eval… XXX_user=rootX XXX_password=rootX123 XXX_host=sqlserver01.example.com YYY_user=rootY YYY_password=rootY123 YYY_host=sqlserver02.example.com ZZZ_user=rootZ ZZZ_password=rootZ123 ZZZ_host=sqlserver03.example.com connect_to() { local database="$1" user_key="${database}_user" password_key="${database}_password" host_key="${database}_host" mysql -h "${!

Continuer la lecture 


bash, fonction de filtre et d'extraction de données d'un csv en bash

2013-09-28

J’ai mis à disposition sur mon repository git un utilitaire csv-functions.sh pour filtrer et extraire des données d’un fichier csv en bash. Voici un exemple d’utilisation : csvexample() { (cat <<-EOF lastname;firstname;birth;number_of_child doe;john;1975;2 doe;foo;1990;1 doe;jane;1985;2 EOF ) > example.csv declare -A persons csvindexes persons example.csv for tuple in $(csvvalues example.csv | csvfilter persons "lastname=doe" "birth=1985" "number_of_child=2") do eval $(csvextract persons $tuple "vara=lastname" "varb=firstname" "varc=birth" "vard=number_of_child") echo "vara=$vara" echo "varb=$varb" echo "varc=$varc" echo "vard=$vard" done rm -f example.

Continuer la lecture 


bash, chemin et nom de fichier sans dirname/basename (et sans sous-processus)

2013-08-27

Voici une astuce pour récupérer le chemin et le nom d’un fichier sans utiliser les commandes dirname/basename (et sans la création de sous-processus lors de l’appel à ces commandes) $ s='abc/def/ghi/klmnop.ext' $ echo ${s##*/} klmnop.ext $ echo ${s%/*} abc/def/ghi Cela permet d’optimiser la récupération de ces informations lors de traitements sur un grand nombre de fichiers par exemple.

Continuer la lecture 


Algorithme pour afficher un arbre

2013-08-16

Voici un algorithme pour afficher un joli arbre à la manière de la commande tree. private void print(Writer out, String prefix, List<Object> items) throws IOException { int j; for (j=items.size()-1; j>=0; j--) { Object o = items.get(j); if (! (o instanceof List)) break; } for (int i=0; i<items.size(); i++) { Object o = items.get(i); boolean isTail = (i >= j) || (i == items.size() - 1); if (! (o instanceof List)) { out.

Continuer la lecture 