【问题标题】:Set sticky bit permission using bash script使用 bash 脚本设置粘滞位权限
【发布时间】:2021-04-17 03:26:46
【问题描述】:

谁能指导一下,如何将这个linux命令实现到bash脚本中

df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type d -perm -0002 2>/dev/null | xargs chmod a+t

【问题讨论】:

  • 只要把它放在一个以#!/bin/bash开头的文件中,并使其可执行。有什么问题?
  • 它给了我这个错误“chmod:‘a+t’之后缺少操作数”
  • 它给了你这个结果,因为你的管道没有为你提供任何输出。
  • 注意:这是简单的shell,而不是具体 bash

标签: bash


【解决方案1】:

简单

将其放入文件中,在第一行添加 shebang

#!/bin/sh

df --local -P |
    awk '{if (NR!=1) print $6}' |
    xargs -I '{}' find '{}' -xdev -type d -perm -0002 2>/dev/null |
    xargs --no-run-if-empty chmod a+t

但是由于这个问题被标记为

下,我会这样写:

#!/bin/bash

{ read foo; mapfile -t mpoints;} < <(df --local -P)
TEXTDOMAIN=libc
exec 2> >(exec grep -v '^find: .*'$"Permission denied"\$ >&2)
find "${mpoints[@]#*% }" -xdev -type d -perm -0002 -exec chmod a+t {} +

简短、快速、高效!

解释:

  • read foo 只是鞭打df 输出的标题行
  • mapfile -t 将剩余的 df 输出放入 $mpoint 数组中,(-t 删除尾随 换行符)。
  • exec ... {} ... + 将完成与使用 xargs 大致相同的工作。
  • exec 2&gt;... &gt;&amp;2 将默默地删除与 STDERR 中的 regex 匹配的行。
  • TEXTDOMAIN=libc$"Permission denied" 将对消息进行本地化,以使该脚本适用于多种语言。

【讨论】:

  • 它给了我这个错误“chmod:‘a+t’之后缺少操作数”。
  • 如果find 输出为空,您必须将--no-run-if-empty 添加到最后一个xargs
  • ... 将大括号 放入 引号中:awk '{if (NR!=1) print $6}'.
  • kool ..2 事情浮现在脑海 1)如何确保执行文件的 root 权限 2)如何捕获任何错误并存在 1
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多