酷徒LOGO

在目录中,自动/默认 permissionfor Linux文件


问题:

我已经看到了这个问题的许多答案,但现在没有一。

现在,我正在学习bash脚本,但是每当我写一个 shell script,我必须手动转换它的权限,然后才能尝试。

我必须用一些东西

chmod 755 <script.sh>

每次我创建一个新的脚本。

我试过应用

chmod g+rwxs <directory>

在父目录上,但它不工作。 任何解决方案?

如果我希望这个解决方案只是为了这个目录而不是为了创建一个新文件的过程,我不希望这个解决方案成为 umask。


回答 1:

首先,IMHO,许可系统是为了你的保护,最好是学习。 但是,如果你真的想放弃它,那么这里是。 打开一些终端并运行以下命令:


inotifywait -m"$HOME/bin" -e close_write -e moved_to --format '%w%f' | while read -r fname; do chmod +x"$fname"; done



或者,对于那些希望它的命令分布在多行上的用户:


inotifywait -m"$HOME/bin" -e close_write -e moved_to --format '%w%f' |


 while read -r fname


 do


 chmod +x"$fname"


 done



这里命令将向 $HOME/bin 目录( 或者其他你选择的目录) 中创建或者移到的每个文件添加执行权限。

如果系统还没有安装 inotifywait,可能需要使用如下命令安装它:


apt-get install inotify-tools



使用指导

  • inotifywait -m"$HOME/bin" -e close_write -e moved_to --format '%w%f'

    这里命令监视目录 $HOME/bin。 任何时候将文件移入该目录( moved_to ) 或者在该目录( close_write ) 中写入和关闭文件时,命令将写入文件路径和名称。

    ( 这里的一个缺点是 inotifywait 不支持nul分离输出。 因此,如果文件名包含换行符,则这里脚本将不起作用。)

  • |

    这会导致启动一个管道,它将 inotifywait的stdout发送到下一个命令的stdin。

  • while read -r fname; do

    这将启动一个循环,从stdin读取行并将它们分配给变量 fname

  • chmod +x"$fname"

    这将在文件 $fname 中添加执行位。 如果希望系统上的其他用户能够运行命令,则可以将它的更改为 chmod a+x"$fname"。 或者,如果你确实想将它的更改为 chmod 755"$fname",则可以将。

  • done

    这表明了循环的结束。


回答 2:

你可以使用以下命令执行脚本


bash <the script> <args> <to> <the> <script>



或者,即使你已经在运行 bash,但仍不考虑延迟变量:


. <the script> <args> <to> <the> <script>`



( 因为 bash 本身并不关心执行标志,它只是由查看"shebang"的同一装载器检查脚本的运行方式)。






Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷