다음 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