linux - 为什么这个文件没有被删除?

标签 linux bash exit-code

我很难理解为什么以下情况会在文件系统上留下文件“锁定”。

文件脚本:

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

文件子/下标:

#!/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"

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

我认为它应该做什么:

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

2) 它将运行 script 并在其中运行另一个 run-parts 实例,该实例找到脚本 sub/subscript 并运行这个

3) 文件 sub/subscript 将创建文件 lock 并且应该在信号 0, 1, 2, 5 时再次删除它或 15 次发生。

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

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

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

但是在我的情况下,这两个解决方案不是一个选项,因为我不是代码的维护者。

据我了解,上述两个信号都不会被触发。这是为什么?

操作系统:Debian Jessie

最佳答案

所以...

#!/bin/sh
set -e

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

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

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

touch ./lock
echo "test"

然后运行上面的代码,如果锁不存在的话。你触摸文件,回显测试,然后删除它。如果您看到回显的“测试”,您还没有提到。它似乎按预期工作。

关于linux - 为什么这个文件没有被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878194/

相关文章:

linux - Linux 中的硬链接(hard link)

bash - 为什么 "No such file or directory"出现在我的环境变量中?

mysql - 适用于手动查询,但不适用于 bash sh 文件

msbuild - 在 MSBuild 中捕获错误状态

c - 退出状态是可观察的行为吗?

android - 错误 : resizing partition e2fsck failed with exit code 8

linux - 列出多个 .tar 归档文件的内容

linux - 如何找到没有。 bash 字符串中某个字符出现的次数?

linux - 在 Linux 中将 Android Studio 安装到/opt(将 1.9 GB ~/Android/Sdk 移动到/opt)

linux - setfacl : about the options