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何らかの理由でコマンドはエラーなしで失敗します。それでは、私が何を間違っているのでしょうか?エムティア! :-)

inotifywait編集:スクリプトにいくつかのエコーステートメントを追加してディレクトリを監視しており、.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

おすすめ記事