bash - 未找到使用 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: 没有这样的文件或目录
但我觉得这是一个红鲱鱼。
解决方案
正如 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
在同一命令替换中添加一个以生成函数所需变量的文本描述) .
推荐阅读
- c++ - ns3 错误:从 'const ns3::TcpOption*' 到 'ns3::TcpOption*' 的无效转换 [-fpermissive]
- python - 通过 Python 从 Cloud Storage 到 BigQuery
- javascript - 计算解析的整数差时得到 NaN
- sql - 将多行合并为 1 - 更新表
- amazon-web-services - 如何配置 aws 事件桥以将事件作为内部或私有(VPC)发送到 URL
- flutter - 加载 tflite 模型颤振时失去与设备的连接
- python - 如何在 django 信号中以编程方式更新 m2m 字段
- java - Spring + MySQL 记录被复制而不是更新
- javascript - Intrexx - 通过 javascript 触发工作流
- php - Json 字符串在 2032 字节处被截断