我有以下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
可以更好地处理我的用例。
@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] 删除。
我来说两句