首页 > 解决方案 > 未找到使用 sudo 返回命令的 bash 别名

问题描述

我正在尝试使用在我现有的别名上使用 sudo 的解决方案,正如许多现有答案中所涵盖的那样,我很困惑为什么它不起作用

alias sudo='sudo '

我将所有别名保存在.bash_aliases. 在里面.bash_aliases我有这个

function _test {
    echo 'test!'
}

alias test='_test'

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

sudo:_test:找不到命令

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

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

但我觉得这是一个红鲱鱼。

标签: bashaliassudo

解决方案


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

但是,您可以传递一个函数(实际上,基本上没有充分的理由使用别名而不是单独使用函数)。

_test() {
    echo 'test!'
}

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

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


推荐阅读