Lock
ou comment créer un fichier de lock en bash
LOCK_FILE=/var/run/$(basename $0).lock
kill -0 $(cat $LOCK_FILE 2>/dev/null) 2> /dev/null
if [ $? -eq 1 ]
then
echo $$ > $LOCK_FILE
else
echo "process en cours"
exit 1
fi
Version courte :
LOCK_FILE=/var/run/$(basename $0).lock
kill -0 $(cat $LOCK_FILE 2>/dev/null) 2> /dev/null && exit 1 || echo $$ > $LOCK_FILE
Substitution
ou comment éviter d’appeler sed. L’inconvénient c’est que ça ne fonctionne que sur une variable et pas sur l’entrée standard. Si l’on a :
FOO="titi.toto"
La ligne
FOO=$(echo $FOO| sed -e 's/toto/txt/g')
peut s’écrire
FOO=${FOO/toto/txt}
Ce qui, il faut l’avouer, est beaucoup plus court.
Progression
Comment afficher la progression d’un script bash en supposant que nous ayons dans $TOTAL le nombre total d’itérations :
COUNT=0;
for i in $(seq 1 $TOTAL)
do
#Process
# ...
COUNT=$(($COUNT + 1))
DIV=$(echo "$COUNT % ($TOTAL / 100)" | bc )
[ $DIV -eq 0 ] && echo -e -n "\r$COUNT / $TOTAL"
done
echo -e "\r$TOTAL / $TOTAL"
Ligne à ligne
IFS_OLD=$IFS
IFS=$'\n'
for line in $(cat file)
do
....
done
IFS=$IFS_OLD
Merci d'avoir pris le temps de lire ce texte. Vous pouvez soutenir l'écriture de ces billets et la réalisation des livecoding par de nombreux moyens. Mais le plus beau moyen de me remercier est de simplement partager ce texte autour de vous.
Sauf mention contraire, tout le contenu de ce site est sous licence