## Copyright (c) 2009 Kevin Porter / Advanced Web Construction Ltd# (http://coding.tinternet.info, http://webutils.co.uk)# Copyright (c) 2010-2012 Ruediger Meier <sweet_f_a@gmx.de># (https://github.com/rudimeier/)## Simple INI file parser.## See README for usage.##function read_ini(){# Be strict with the prefix, since it's going to be run through evalfunction check_prefix(){if ! [["${VARNAME_PREFIX}"=~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]];thenecho"read_ini: invalid prefix '${VARNAME_PREFIX}'" >&2
return 1
fi}function check_ini_file(){if[ ! -r "$INI_FILE"];thenecho"read_ini: '${INI_FILE}' doesn't exist or not"\"readable" >&2
return 1
fi}# enable some optional shell behavior (shopt)function pollute_bash(){if ! shopt -q extglob ;thenSWITCH_SHOPT="${SWITCH_SHOPT} extglob"fiif ! shopt -q nocasematch ;thenSWITCH_SHOPT="${SWITCH_SHOPT} nocasematch"fishopt -q -s ${SWITCH_SHOPT}}# unset all local functions and restore shopt settings before returning# from read_ini()function cleanup_bash(){shopt -q -u ${SWITCH_SHOPT}unset -f check_prefix check_ini_file pollute_bash cleanup_bash
}local INI_FILE=""local INI_SECTION=""# {{{ START Deal with command line args# Set defaultslocal BOOLEANS=1
local VARNAME_PREFIX=INI
local CLEAN_ENV=0
# {{{ START Options# Available options:# --boolean Whether to recognise special boolean values: ie for 'yes', 'true'# and 'on' return 1; for 'no', 'false' and 'off' return 0. Quoted# values will be left as strings# Default: on## --prefix=STRING String to begin all returned variables with (followed by '__').# Default: INI## First non-option arg is filename, second is section namewhile[$# -gt 0]docase$1 in
--clean | -c )CLEAN_ENV=1
;;
--booleans | -b )shiftBOOLEANS=$1;;
--prefix | -p )shiftVARNAME_PREFIX=$1;;
* )if[ -z "$INI_FILE"]thenINI_FILE=$1elseif[ -z "$INI_SECTION"]thenINI_SECTION=$1fifi;;esacshiftdoneif[ -z "$INI_FILE"]&&["${CLEAN_ENV}"=0];thenecho -e "Usage: read_ini [-c] [-b 0| -b 1]] [-p PREFIX] FILE"\"[SECTION]\n or read_ini -c [-p PREFIX]" >&2
cleanup_bash
return 1
fiif ! check_prefix ;then
cleanup_bash
return 1
filocal INI_ALL_VARNAME="${VARNAME_PREFIX}__ALL_VARS"local INI_ALL_SECTION="${VARNAME_PREFIX}__ALL_SECTIONS"local INI_NUMSECTIONS_VARNAME="${VARNAME_PREFIX}__NUMSECTIONS"if["${CLEAN_ENV}"=1];theneval unset"\$${INI_ALL_VARNAME}"fiunset${INI_ALL_VARNAME}unset${INI_ALL_SECTION}unset${INI_NUMSECTIONS_VARNAME}if[ -z "$INI_FILE"];then
cleanup_bash
return 0
fiif ! check_ini_file ;then
cleanup_bash
return 1
fi# Sanitise BOOLEANS - interpret "0" as 0, anything else as 1if["$BOOLEANS" !="0"]thenBOOLEANS=1
fi# }}} END Options# }}} END Deal with command line argslocal LINE_NUM=0
local SECTIONS_NUM=0
local SECTION=""# IFS is used in "read" and we want to switch it within the looplocal IFS=$' \t\n'local IFS_OLD="${IFS}"# we need some optional shell behavior (shopt) but want to restore# current settings before returninglocal SWITCH_SHOPT=""
pollute_bash
whileread -r line ||[ -n "$line"]do((LINE_NUM++))# Skip blank lines and commentsif[ -z "$line" -o "${line:0:1}"=";" -o "${line:0:1}"="#"]thencontinuefi# Section marker?if[["${line}"=~ ^\[[a-zA-Z0-9_]{1,}\]$ ]]then# Set SECTION var to name of section (strip [ and ] from section marker)SECTION="${line#[}"SECTION="${SECTION%]}"eval"${INI_ALL_SECTION}=\"\${${INI_ALL_SECTION}# } $SECTION\""((SECTIONS_NUM++))continuefi# Are we getting only a specific section? And are we currently in it?if[ ! -z "$INI_SECTION"]thenif["$SECTION" !="$INI_SECTION"]thencontinuefifi# Valid var/value line? (check for variable name and then '=')if ! [["${line}"=~ ^[a-zA-Z0-9._]{1,}[[:space:]]*=]]thenecho"Error: Invalid line:" >&2
echo" ${LINE_NUM}: $line" >&2
cleanup_bash
return 1
fi# split line at "=" signIFS="="read -r VAR VAL <<<"${line}"IFS="${IFS_OLD}"# delete spaces around the equal sign (using extglob)VAR="${VAR%%+([[:space:]])}"VAL="${VAL##+([[:space:]])}"VAR=$(echo$VAR)# Construct variable name:# ${VARNAME_PREFIX}__$SECTION__$VAR# Or if not in a section:# ${VARNAME_PREFIX}__$VAR# In both cases, full stops ('.') are replaced with underscores ('_')if[ -z "$SECTION"]thenVARNAME=${VARNAME_PREFIX}__${VAR//./_}elseVARNAME=${VARNAME_PREFIX}__${SECTION}__${VAR//./_}fieval"${INI_ALL_VARNAME}=\"\${${INI_ALL_VARNAME}# } ${VARNAME}\""if[["${VAL}"=~ ^\".*\"$ ]]then# remove existing double quotesVAL="${VAL##\"}"VAL="${VAL%%\"}"elif[["${VAL}"=~ ^\'.*\'$ ]]then# remove existing single quotesVAL="${VAL##\'}"VAL="${VAL%%\'}"elif["$BOOLEANS"=1]then# Value is not enclosed in quotes# Booleans processing is switched on, check for special boolean# values and convert# here we compare case insensitive because# "shopt nocasematch"case"$VAL" in
yes |true| on )VAL=1
;;
no |false| off )VAL=0
;;esacfi# enclose the value in single quotes and escape any# single quotes and backslashes that may be in the valueVAL="${VAL//\\/\\\\}"VAL="\$'${VAL//\'/\'}'"eval"$VARNAME=$VAL"done <"${INI_FILE}"# return also the number of parsed sectionseval"$INI_NUMSECTIONS_VARNAME=$SECTIONS_NUM"
cleanup_bash
}
exemple :
read_ini "/etc/yum.conf" main --prefix "yum_config"echo"--- Depuis le cache yum : ${yum_config__main__cachedir}"
Microsoft a dû fiancer une partie d'Apple, puis Apple a demandé a Microsoft d'accepter un accord secret (dans les grandes lignes 'on ne se copie pas') afin d'éviter un procès qu'Apple aurait gagné.
Qui a gagné ? Apple.
Donc l'action contre Microsoft l'a fortement destabilisé.
Apparemment ya un commentaire sur votre video qui indique un bug :
"Sylvestre : Non, c'est normal et coordonné entre Mozilla et Google: bugzilla.mozilla.org/show_bug.cgi?id=1096492#c21
Pour résumer, Firefox a un bug dans une technologie intitulé Web Worker, c'est désactivé quand le User Agent est Firefox…"
Le protocole est le même ?
il n'y a pas de spdy (ou http2) enclenché avec chrome et pas Firefox ?
@+
ps : sinon je suis le 1er pour cracher sur google ;)
Une forge open sources que l'on peut installer chez sois : http://phabricator.org
C'est Facebook qui a commencé le projet
Le seul reproche : ce n'est pas en français
On l'utilise à la boîte.
[^] # Re: et Objective-C?
Posté par bunam . En réponse au journal swift 2 sera open source. Évalué à 7.
Je crois qu'il est facile de confondre le langage Objective-C avec les classes/API qui font sa force et qui ne sont disponibles que sur Mac ou iOS.
[^] # Re: pure bash et un peu long
Posté par bunam . En réponse au journal Lire de fichiers de configuration depuis un script shell. Évalué à 1.
Je pense être le seul à répondre au problème : shell et config type ini ;p
# pure bash et un peu long
Posté par bunam . En réponse au journal Lire de fichiers de configuration depuis un script shell. Évalué à -1.
j'ai utilisé
exemple :
# manger des pommes
Posté par bunam . En réponse au journal Talking about a Revolution. Évalué à 1.
Je suis sur le bon site la ??? :)
un mangeur de pommes
[^] # Re: Le démantelement, je n'y crois pas.
Posté par bunam . En réponse au journal Démantèlement du plus gros éditeur de distributions Linux pour bientôt ?. Évalué à -1.
Oui c'est une histoire d'un an
l'accord avec Apple 1997
http://en.wikipedia.org/wiki/United_States_v._Microsoft_Corp. 1998
Mais je suis certain que Microsoft savait ce qui allait lui arriver…
[^] # Re: Le démantelement, je n'y crois pas.
Posté par bunam . En réponse au journal Démantèlement du plus gros éditeur de distributions Linux pour bientôt ?. Évalué à -2.
Microsoft a dû fiancer une partie d'Apple, puis Apple a demandé a Microsoft d'accepter un accord secret (dans les grandes lignes 'on ne se copie pas') afin d'éviter un procès qu'Apple aurait gagné.
Qui a gagné ? Apple.
Donc l'action contre Microsoft l'a fortement destabilisé.
[^] # Re: Le protocole est le même ?
Posté par bunam . En réponse au journal Google: je sais, je sais... mais tout de même, j'ai les boules !. Évalué à 8.
Apparemment ya un commentaire sur votre video qui indique un bug :
"Sylvestre : Non, c'est normal et coordonné entre Mozilla et Google: bugzilla.mozilla.org/show_bug.cgi?id=1096492#c21
Pour résumer, Firefox a un bug dans une technologie intitulé Web Worker, c'est désactivé quand le User Agent est Firefox…"
# Le protocole est le même ?
Posté par bunam . En réponse au journal Google: je sais, je sais... mais tout de même, j'ai les boules !. Évalué à 1.
Le protocole est le même ?
il n'y a pas de spdy (ou http2) enclenché avec chrome et pas Firefox ?
@+
ps : sinon je suis le 1er pour cracher sur google ;)
# heu
Posté par bunam . En réponse au journal Rions un peu avec apple. Évalué à 2.
le problème est quelle tourne avec launchd
# phabricator ?
Posté par bunam . En réponse au journal Fermeture progressive de Google Code. Évalué à 9. Dernière modification le 13 mars 2015 à 13:47.
Une forge open sources que l'on peut installer chez sois :
http://phabricator.org
C'est Facebook qui a commencé le projet
Le seul reproche : ce n'est pas en français
On l'utilise à la boîte.
[^] # Re: Question naïve active sync
Posté par bunam . En réponse au journal Reprise en main de mes données personnelles.. Évalué à 0. Dernière modification le 20 février 2015 à 23:11.
active sync est sensé apporter le push et faire économiser la batterie des téléphones
[^] # Re: Bindings
Posté par bunam . En réponse à la dépêche Gtk to Qt - A strange journey. Évalué à 1.
M# !! ok je sors ;)
[^] # Re: Pas mal mais
Posté par bunam . En réponse à la dépêche Proxmox VE 3.0 est sorti. Évalué à 1.
L'intérêt : lancer plusieurs actions en même temps et avoir une vue d'ensemble sur tout ce qu'il se passe sur le serveur…
Pour le plug-in Java, la solution spice permettra-t-elle à terme de le remplacer ?
[^] # Re: Un bon suivi
Posté par bunam . En réponse à la dépêche Proxmox VE 3.0 est sorti. Évalué à 1.
merci pour ces précisions
et spice coté client sur mac ça donne quoi ?
# page2rss
Posté par bunam . En réponse à la dépêche Méthode et outils pour la veille technologique. Évalué à 3.
J'utilise page2rss (comme son nom l'indique ;))
[^] # Re: Installation cool
Posté par bunam . En réponse à la dépêche Shinken 1.2. Évalué à 0.
http://www.startssl.com ?
# Avis personnel
Posté par bunam . En réponse à la dépêche Bref, MPlayerX quitte le Mac App Store. Évalué à -10. Dernière modification le 24 août 2012 à 22:21.
MPlayer est une daube…
dommage ;(
Le sandboxing est pour le moment la seul réponse, c'est dommage, j'aime bien que les logiciels se causes…
[^] # Re: Jelly Bean
Posté par bunam . En réponse à la dépêche Android : dérivées, fragmentation, applications. Évalué à -3.
à faire comme l'Apple TV ;)
# remarques
Posté par bunam . En réponse à la dépêche (R)évolutions dans le monde de la sauvegarde de données. Évalué à 3.
merci pour l'article
J'utilise a fond crashplan et rdiff-backup (que je n'ai pas couplé a zfs, et pourtant j'en rêve)
Pour les clients c'est tar ;)
Je pense regarder Obnam
Avez-vous connaissance de https://github.com/n8gray/Backup-Bouncer qui permet de vérifier que le système de sauvegarde que l'on utilise restaure tout comme il faut ?
(http://www.haystacksoftware.com/blog/2010/06/crashplan-restore-analysis/)
# Un grand merci !!
Posté par bunam . En réponse à la dépêche Entretien avec les membres francophones de CentOS. Évalué à 2.
Merci beaucoup pour ce que vous faites !
Je trouve dommage que l'idée de la saine complétion persiste entre les 3... surtout avec SL. Avec Oracle eu... bon ;)
Je pense que la compétition est ailleurs (autres distri, plateformes...)
[^] # Re: ispconfig ?
Posté par bunam . En réponse à la dépêche Sortie de AlternC 1.0. Évalué à 2.
Le développement est continu, les plateformes supportées sont nombreuses, le nombre des fonctionnalités est important.
C'est disponible chez ovh en "natif"
ispconfig chez ovh
;)
@+
# ispconfig ?
Posté par bunam . En réponse à la dépêche Sortie de AlternC 1.0. Évalué à -7.
j'ai utilisé
http://www.ispconfig.org/
sur plusieurs serveurs.
cela me parait beaucoup plus sérieux...