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

标签 bash shell ksh

我在 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.

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

谢谢。

最佳答案

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

if ! mkdir /tmp/aisync.lock 2>/dev/null; then
  printf "Failed to aquire lock.\n" >&2
  exit 1
fi

这样来自mkdir 的错误信息将被丢弃。同时行为没有改变,mkdir 仍然失败,所以 if 中的条件将评估为真,脚本将以 1 退出。

关于bash - 如何避免shell脚本执行中的命令错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435760/

相关文章:

linux - 在 linux 中使用 while 循环一个一个地测试函数参数

bash - 从shell脚本中的文件名中删除一级文件扩展名

bash - 将输出写入shell中的多个文件

bash - 如何在查找中包含隐藏目录?

mysql - 需要 "build"一个 mysql 命令并在 shell 脚本中执行它

bash - 我脚本中的 grep 命令返回空结果,但可以从命令行运行

bash - 基于特定字段的 grep/awk 特定行;在 awk 中使用 ksh 变量

Docker:将 Linux korn Shell 添加到现有容器

linux - Bash 循环 : How to execute once, 然后移动到下一个迭代

BASH - 使用 LS 和通配符的 FOR 循环