如何使用自訂功能啟用“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

然後就會照預期工作!

相關內容