如何使用自定义功能启用“sudo”?

如何使用自定义功能启用“sudo”?

最近我了解到您可以启用sudo自定义别名,如下所示:

alias sudo='sudo ' # note: the space is required!

这有效的原因如下:

如果别名值的最后一个字符是空格或制表符,则还会检查别名后面的下一个命令字是否有别名扩展。

我的问题是:有没有办法sudo也启用自定义功能?

答案1

在一般情况下,您尝试做的事情并没有真正起作用。

对于别名,在传递执行行之前几乎只需重写字符串即可。

因此,举例来说,如果您有

alias sudo='sudo '
alias foo='bar baz'

然后当您输入sudo foo命令行时被重写sudo bar baz然后就是运行的内容。这是简单的命令行重写。

现在功能更难了。它们不是简单的重写,而是完整的评估;他们可以设置变量、更改目录、打开文件......几乎可以做任何事物外壳就可以做到。而且,重要的是,它们在当前 shell 的上下文中运行。当你跑步时sudo myfunction,这一切都是不可能的;特别是sudo命令作为子进程运行,因此不会影响当前 shell。

用于解决上述问题的解决方法sudowrap是尝试自动计算sudo bash -c 'myfunction() {...} ; myfunction'。这显式调用一个新的bash子 shell,然后在该子 shell 中运行该函数。显式调用清楚地表明,设置变量之类的事情将不起作用:-)它允许功能的有限子集。

您可以通过这种方式调用的函数类型可能会更好地重写为 shell 脚本而不是函数;然后sudo就可以直接打电话给他们了。给出的例子在http://w00tbl0g.blogspot.com/2007/05/using-bash-functions-under-sudo.htmlduk转换为可执行文件会更容易

#!/bin/bash
exec du -k "$@" | sort -n

然后就会按预期工作!

相关内容