为什么不删除此文件?

时间:2017-01-26 16:24:52

标签: linux bash exit-code

我很难理解为什么以下情况会使文件系统上出现“lock”文件。

档案script

#!/bin/sh
set -e
run-parts sub &> /dev/null

档案sub/subscript

#!/bin/sh
set -e

# Exit if another job is running.
[ -e ./lock ] && exit 0

trap "rm -f ./lock; exit" 0 1 2 5 15

touch ./lock
echo "test"

现在在run-parts --report .所在的文件夹中运行script时,为什么它会以文件lock退出?

我认为它应该做什么:

1)在当前文件夹中查找可运行的脚本(找到script

2)它将运行script并在其中运行另一个运行部件实例,该实例找到脚本sub/subscript并运行此脚本

3)当信号0,1,2,5或15出现时,文件sub/subscript将创建文件lock再次将其删除。

到目前为止我发现了什么:

1)删除&> /dev/null将删除锁定文件

2)删除--report也会删除锁定文件

但是在我的情况下,这两个分辨率不是一个选项,因为我不是代码的维护者。

根据我的理解,所提到的信号都不会被触发。这是为什么?

操作系统:Debian Jessie

1 个答案:

答案 0 :(得分:0)

因此...

#!/bin/sh
set -e

# Exit if another job is running.
[ -e ./lock ] && exit 0

首先,将#!/bin/sh更改为#!/bin/bash,因为这是一个重击问题。您可能正在运行将/ bin / sh链接到/ bin / bash的Linux风格,但这不确定。接下来,如果您运行此命令并且锁定文件存在,它将退出并保留文件。

trap "rm -f ./lock; exit" 0 1 2 5 15

touch ./lock
echo "test"

如果没有锁,则上面运行了。您触摸文件,回显测试,然后将其删除。如果你看到一个“测试”还没回来,你就没有提到过。它似乎按预期工作。