我在shell脚本中有一个代码块,如下所示。
run_checks()
{
# Check if program is already running
if ! mkdir /tmp/aisync.lock; then
printf "Failed to aquire lock.\n" >&2
exit 1
fi
trap 'rm -rf /tmp/aisync.lock' EXIT
}它基本上检查aisync.lock是否存在,如果存在则失败,以防止同一个shell脚本的多个实例运行。
但是,如果我从控制台运行这个程序,我会得到..。
# syncai.sh
mkdir: 0653-358 Cannot create /tmp/aisync.lock.
/tmp/aisync.lock: Do not specify an existing file.
Failed to aquire lock.有避免错误的方法吗?
mkdir: 0653-358 Cannot create /tmp/aisync.lock.
/tmp/aisync.lock: Do not specify an existing file.所以当我从命令行运行它时,它看起来更干净。我知道,如果我使用它,我可以将所有内容发送到/dev/null,我打算这样做。但是,如何从控制台手动运行,如何从打印中删除这些错误?
谢谢。
发布于 2013-10-17 19:49:08
您可以这样更改脚本的中间部分:
if ! mkdir /tmp/aisync.lock 2>/dev/null; then
printf "Failed to aquire lock.\n" >&2
exit 1
fi这样,来自mkdir的错误消息就会被丢弃。同时,行为不变,mkdir仍然失败,因此if中的条件将计算true,脚本将退出1。
发布于 2013-10-18 21:07:22
可靠的bash锁功能:
LOCK()
{
LOCKDIR="/tmp/${0##*/}-lock-$1"
PIDFILE="${LOCKDIR}/PID"
if mkdir "${LOCKDIR}" &>/dev/null; then
echo "$$" >"${PIDFILE}"
trap 'rm -rf "${LOCKDIR}"' 0
trap 'echo "killed by a signal." >&2; exit' 1 2 3 15
else
OTHERPID="$(cat "${PIDFILE}")"
if ! kill -0 $OTHERPID &>/dev/null; then
echo "removing stale lock of nonexistant PID ${OTHERPID}" >&2
rm -rf "${LOCKDIR}"
exit
fi
fi
}https://stackoverflow.com/questions/19435760
复制相似问题