bash别名使用sudo返回命令未找到



我正试图使用sudo在我现有的别名上的解决方案,因为在许多现有的答案已经涵盖,我很困惑,为什么它不工作

alias sudo='sudo '

我把所有的别名都保存在.bash_aliases中。在.bash_aliases中我有这个

function _test {
echo 'test!'
}
alias test='_test'

我每次都重新加载。bashrc;source .bashrc,但当我运行sudo test时,我总是得到

sudo: _test: command not found

唯一奇怪的事情是我在重新加载时得到以下内容,而不是在新的终端

dircolors:/home/MYHOME/.dircolors:没有这样的文件或目录

但我觉得这是在转移注意力。

正如10b0所说,在bash中不能以这种方式使用别名

然而,你可以传递一个函数(实际上,基本上没有一个好的理由使用别名而不是坚持单独使用函数)。

_test() {
echo 'test!'
}
sudo_test() {
sudo bash -c "$(declare -f _test)"'; _test "$@"' sudo_test "$@"
}

…将定义一个命令sudo_test,该命令通过sudo运行函数_test。(如果此函数的实际版本调用其他函数或需要访问shell变量,请将这些其他函数添加到declare -f命令行中,并/或在相同的命令替换中添加declare -p,以生成函数所需变量的文本描述)

要运行像alias_name这样的别名,它必须恰好是命令中的第一个单词,所以sudo alias_name永远不会工作。同样'alias_name',alias_name和其他东西最终扩展到别名。

最新更新