
次の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