小编GEO*_*GEO的帖子

Shell/Bash 脚本:正确删除权限

好的,首先,我知道这个问题在这里已经被问过几次了,但是给出的答案并不完全让我满意。情况如下:我编写了许多脚本来自动化各种维护任务,目的是完全自动化并且一旦开始就不需要交互。现在,各种任务(例如安装内容等)通常需要 root 权限,但更多时候我不喜欢使用超级用户权限执行命令或整个块(例如 wget,或提取从网络获取的存档等),在最坏的情况下限制损坏。显然,为了满足我的目标,必须根据命令使用sudo或调用脚本su并删除特权并重新获得它们。

现在我已经考虑了一些选择,但它们并没有完全让我满意,因此我想咨询这里的专家,以了解哪个是最好的解决方案(目的是代码易于理解并且对其他人也具有逻辑结构一旦发布):

1.) 将要以非 root 用户身份执行的位分解到外部文件中,并使用su <user> -c /path/to/file. 然而,这种方法有两个缺点:首先,它破坏了脚本的逻辑结构,使事情更难理解和阅读,并在定义和使用变量时产生问题。

2.) 定义别名或函数来缩短su <user> -c "command". 这是一个非常糟糕的主意,因为 80% 的脚本都具有该特权前缀。除此之外,多行命令是有问题的(比如包含我不想以 root 身份运行的命令的结构)。

3.) 类似的东西su <user> << EOF << ... EOF可以正确处理整个代码块。如果没有一个问题困扰我,这将是最优雅的解决方案(因为脚本的逻辑结构没有被破坏):语法高亮。我尝试过的所有主要编辑器都对 here 文档中的整个块使用一种颜色。通读一个 80% 没有语法突出显示的脚本并不是很好。

有没有真正优雅的方法来处理这个问题?su <user> -c ( ...)没有引号的东西会很酷。或者我应该切换到另一个shell?(现在我使用 bash,我听说 zsh 有一个功能可以设置 EUID 变量或类似的东西?)如果没有优雅的解决方案,哪种方法更可取?

bash zsh privileges

5
推荐指数
2
解决办法
2216
查看次数

sed:在包含 X 但不包含 Y 的行中替换

我正在寻找一种结合了这两个命令的优雅解决方案:

sed -i '/Y/! s/replace/with/' /path/to/file
sed -i '/X/ s/replace/with/' /path/to/file
Run Code Online (Sandbox Code Playgroud)

我试过

sed -i '/X/ /Y/! s/replace/with/' /path/to/file
Run Code Online (Sandbox Code Playgroud)

这不起作用。有没有一个优雅的解决方案?

sed

4
推荐指数
1
解决办法
4202
查看次数

标签 统计

bash ×1

privileges ×1

sed ×1

zsh ×1