sudo:命令:在 CentOS 6 上找不到命令
Posted
技术标签:
【中文标题】sudo:命令:在 CentOS 6 上找不到命令【英文标题】:sudo: command: command not found on CentOS 6 【发布时间】:2019-04-05 20:50:55 【问题描述】:MVCE:
关于bash 4.1.2
、Centos 6.10
(因为我们是怪物)。
sudo command vim
返回
sudo: command: command not found
我不明白为什么。在bash 4.4.23
、Mac OS High Sierra
上,它按预期工作。由于人们使用“命令”作为他们正在谈论的各种命令的占位符,因此很难在 google 上搜索。
实际问题:
我有一个名为 vim
的函数(见下文),将 command
从它对 vim 的调用中取出 不会 导致它失败,就像我所期望的那样,在两者上bash 4.4 和 4.1。
如果我无法写入文件,我有一个自动 sudo vim 的功能:
vim()
#only good for auto-sudo. delete if no sudo privileges.
if [[ "$#" -ne 1 ]]; then
command vim "$@"
#cases: if we can write to the file, or the file doesn't exist but we can make new files in that dir
elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
# \vim or 'vim' only escape aliases, not functions
command vim "$1"
else
#this 'command' isn't required! It won't loop forever without it.
sudo env HOME="$HOME" command vim -u $HOME/.vim/vimrc "$1"
fi
我希望命令是必需的,否则vim
应该引用我创建的函数并将其自身称为无限。但是,不仅在 CentOS 和 Mac 系统上不需要,而且它还会导致 CentOS 机器上的功能失败!
谁能解释这种行为?
是否有一个方便的 bash 更改日志我可以查看以了解“命令”是否在 bash 4.1 之后才以某种方式实现?
【问题讨论】:
【参考方案1】:sudo
需要一个可执行文件; command
(通常)是一个内置的 shell,而不是可执行文件,它修改了 shell 如何执行其查找。 sudo vim
可以正常工作,因为 sudo
不能运行 shell 函数或使用名为 vim
的别名来隐藏 command vim
提供给您的可执行文件。
macOS
实际上确实 提供了一个 shell 脚本 /usr/bin/command
(据我所知)似乎模拟了内置的 shell,同时补偿了 HFS+ 默认的不区分大小写.内置的command
将在bash
中隐藏它,但它可以从其他shell(或运行其他命令的命令,如sudo
)获得。
POSIX 要求实现command
,尽管不一定是内置的shell。为操作系统提供一个内置 command
的 shell 可能就足够了。 (POSIX 规范声明“命令实用程序最有可能作为常规内置提供。”,并继续列出command
未列在必须的其他命令中的一些原因> 是内置的。)
【讨论】:
为什么sudo command vim
在我的 Mac 上运行 bash 4.4 呢?为什么 sudo 不能运行名为 vim 的 shell 函数?
刚刚更新了一个答案,我也很困惑。
它也适用于 Centos 7,它也有 /usr/bin/command。那么,sudo 不能运行内置函数,函数也不能运行,但是可执行文件/usr/bin/command
可以,这就是它在它所在的地方工作的原因吗?
正确。它最常被实现为内置的 shell,但它只需要 POSIX 标准可用。因此,符合 POSIX 的操作系统需要确保无论使用哪个 shell,它都可用。
它可能大部分兼容 POSIX,缺少始终可用的command
命令是一个阻止它完全兼容的错误.就像我说的,command
通常由 shell 实现(我真的不知道 没有 的那个),所以它的缺席通常不会被错过(除非你尝试使用它来自env
,就像你在你的shell函数中所做的那样)。以上是关于sudo:命令:在 CentOS 6 上找不到命令的主要内容,如果未能解决你的问题,请参考以下文章
CentOS6.6普通用户使用sudo命令借用root用户权限
Centos sudo命令执行python与普通用户执行python版本不同
sudo: pip: command not found in CentOS