首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免shell脚本执行中的命令错误

如何避免shell脚本执行中的命令错误
EN

Stack Overflow用户
提问于 2013-10-17 19:42:21
回答 2查看 1.6K关注 0票数 3

我在shell脚本中有一个代码块,如下所示。

代码语言:javascript
复制
    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脚本的多个实例运行。

但是,如果我从控制台运行这个程序,我会得到..。

代码语言:javascript
复制
    # syncai.sh
    mkdir: 0653-358 Cannot create /tmp/aisync.lock.
    /tmp/aisync.lock: Do not specify an existing file.
    Failed to aquire lock.

有避免错误的方法吗?

代码语言:javascript
复制
    mkdir: 0653-358 Cannot create /tmp/aisync.lock.
    /tmp/aisync.lock: Do not specify an existing file.

所以当我从命令行运行它时,它看起来更干净。我知道,如果我使用它,我可以将所有内容发送到/dev/null,我打算这样做。但是,如何从控制台手动运行,如何从打印中删除这些错误?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-17 19:49:08

您可以这样更改脚本的中间部分:

代码语言:javascript
复制
if ! mkdir /tmp/aisync.lock 2>/dev/null; then
  printf "Failed to aquire lock.\n" >&2
  exit 1
fi

这样,来自mkdir的错误消息就会被丢弃。同时,行为不变,mkdir仍然失败,因此if中的条件将计算true,脚本将退出1。

票数 3
EN

Stack Overflow用户

发布于 2013-10-18 21:07:22

可靠的bash锁功能:

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19435760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档