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

관련 정보