X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=withlock.sh;fp=withlock.sh;h=980deb133c8997d4c64a726a682e9cbf89889619;hb=c4500f72d280b51f5d8e229c33bfa45b57cbffbc;hp=0000000000000000000000000000000000000000;hpb=4ab8789562205cc53a6050d41ff68e22f8b376ec;p=scripts.git
diff --git a/withlock.sh b/withlock.sh
new file mode 100755
index 0000000..980deb1
--- /dev/null
+++ b/withlock.sh
@@ -0,0 +1,41 @@
+#!/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 . #
+# #
+# Written by and Copyright (C) Francois Fleuret #
+# Contact 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 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
+
+$*