我正试图使用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
和其他东西最终扩展到别名。