--- /dev/null
+#!/bin/bash
+
+#########################################################################
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the version 3 of the GNU General Public License #
+# as published by the Free Software Foundation. #
+# #
+# This program is distributed in the hope that it will be useful, but #
+# WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU #
+# General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see <http://www.gnu.org/licenses/>. #
+# #
+# Written by and Copyright (C) Francois Fleuret #
+# Contact <francois.fleuret@idiap.ch> for comments & bug reports #
+#########################################################################
+
+# This command allows to call another command with a lockfile to avoid
+# concurrent executions for the same user.
+
+set -e
+
+if [[ ! $1 ]]; then
+ echo "withlock.sh <command> [command args]"
+ exit 1
+fi
+
+LOCKFILE=/tmp/lock$(which $1 | sed -e "s:/:-:g").${USER}
+
+(set -C && : > ${LOCKFILE}) 2> /dev/null
+
+if [ $? != "0" ]; then
+ echo "Lockfile ${LOCKFILE} exists." >&2
+ exit 1
+fi
+
+trap 'rm ${LOCKFILE}' EXIT
+
+$*