在 inotifywait 中运行 chmod 命令不起作用

在 inotifywait 中运行 chmod 命令不起作用

我有以下 bash 脚本(另存为~/fix-perms.sh):

#!/usr/bin/env bash
inotifywait -d -r -e close_write -o /dev/stdout ~/testdir |
while read path event file; do
    sudo chown user:group "$path$file"
    if [ -d "$file" ]; then
        sudo chmod 750 "$path"
        echo "Created directory '$path' with 750 permissions"
    else
        sudo chmod 640 "$path$file"
        echo "Created file '$path$file' with 640 permissions"
    fi
done

我认为该脚本的预期目的很明显,但在我的环境中运行它.bashrc无法正确设置组权限,如下所示:

# In .bashrc
~/fix-perms.sh &

# In bash session
user@CentOS8:~/testdir$ ls -lha
drwxr-x---   8 user group 4.0K Jun 18 13:06 .
drwxr-x---   8 user group 4.0K Jun 18 11:45 ..
drwxr-x---  12 user group 4.0K Jun 15 21:23 somedir
-rw-r-----   1 user group  316 Jun 15 23:23 somefile
-rw-r-----   1 user group 1.1K Jun 15 21:24 someotherfile
user@CentOS8:~/testdir$ mkdir subdir
user@CentOS8:~/testdir$ ls -lha
drwxr-x---   8 user group 4.0K Jun 18 13:06 .
drwxr-x---   8 user group 4.0K Jun 18 11:45 ..
drwxr-x---  12 user group 4.0K Jun 15 21:23 somedir
-rw-r-----   1 user group  316 Jun 15 23:23 somefile
-rw-r-----   1 user group 1.1K Jun 15 21:24 someotherfile
drwx------  12 user group 4.0K Jun 15 21:23 subdir

正如您所看到的,该subdir目录已创建并被赋予了正确的所有权,但chmod由于某种原因该命令失败而没有错误。那么我做错了什么? MTIA! :-)

编辑:我已经确认正在inotifywait通过向脚本添加一些 echo 语句来监视目录,每当我将文件或文件夹添加到 .txt 文件时,其输出现在都会显示在终端中~/testdir。我还将事件从 更改为 ,create希望close_write这可以更好地处理我的用例。

答案1

@muru 上面的评论让我思考我是如何测试正在创建的内容,并让我意识到我非常愚蠢。以下代码~/fix-perms.sh运行良好:

#!/usr/bin/env bash

inotifywait -dr -e create -o /dev/stdout ~/testdir |
while read path event file; do
    sudo chown user:group "$path$file"
    if [[ $event == *"ISDIR" ]]; then
        sudo chmod 750 "$path$file"
    else
        sudo chmod 640 "$path$file"
    fi
done

相关内容