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

肯尼83

我有以下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语句来监视目录,每当我向中添加文件或文件夹时,该输出便会显示在终端中~/testdir我也将事件从更改为,create以期close_write可以更好地处理我的用例。

肯尼83

@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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章