Bash sudo:command:在CentOS 6上找不到命令 MVCE:

Bash sudo:command:在CentOS 6上找不到命令 MVCE:,bash,centos6,Bash,Centos6,在bash4.1.2,centos6.10(因为我们是怪物) sudo命令vim 返回 sudo:command:command未找到 我不明白为什么。在bash4.4.23上,Mac操作系统High Sierra按预期工作。用谷歌搜索很困难,因为人们使用“command”作为他们所谈论的各种命令的占位符 实际问题: 我有一个名为vim的函数(如下所示),从对vim的调用中取出命令,不会像我预期的那样,在bash4.4和4.1上失败 如果无法写入文件,我有一个自动sudo vim的功能: vim

bash4.1.2
centos6.10
(因为我们是怪物)

sudo命令vim

返回

sudo:command:command未找到

我不明白为什么。在
bash4.4.23
上,
Mac操作系统High Sierra
按预期工作。用谷歌搜索很困难,因为人们使用“command”作为他们所谈论的各种命令的占位符

实际问题: 我有一个名为
vim
的函数(如下所示),从对vim的调用中取出
命令
,不会像我预期的那样,在bash4.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变更日志,我可以查看,以了解“command”是否在bash4.1之后才以某种方式实现?

sudo
需要一个可执行文件<代码>命令(通常)是一个内置的shell,而不是一个可执行文件,用于修改shell执行其查找的方式
sudo-vim
可以正常工作,因为
sudo
不能运行shell函数或使用名为
vim
的别名来隐藏
命令vim
将提供给您的可执行文件

macOS
实际上提供了一个shell脚本
/usr/bin/command
,它(据我所知)似乎模拟了shell内置,同时补偿了HFS+默认的大小写不敏感。内置的
命令
将在
bash
中隐藏它,但它可以从其他shell(或运行其他命令的命令,如
sudo
)获得



POSIX要求实现
命令
,但不一定是内置的shell。为shell提供内置的
命令
,对于操作系统来说可能就足够了。(POSIX规范声明“命令实用程序最有可能作为常规内置程序提供。”,并继续列出在其他必须内置的命令中没有列出
命令的一些原因。)

sudo
需要一个可执行程序<代码>命令(通常)是一个内置的shell,而不是一个可执行文件,用于修改shell执行其查找的方式
sudo-vim
可以正常工作,因为
sudo
不能运行shell函数或使用名为
vim
的别名来隐藏
命令vim
将提供给您的可执行文件

macOS
实际上提供了一个shell脚本
/usr/bin/command
,它(据我所知)似乎模拟了shell内置,同时补偿了HFS+默认的大小写不敏感。内置的
命令
将在
bash
中隐藏它,但它可以从其他shell(或运行其他命令的命令,如
sudo
)获得



POSIX要求实现
命令
,但不一定是内置的shell。为shell提供内置的
命令
,对于操作系统来说可能就足够了。(POSIX规范声明“命令实用程序最有可能作为常规内置程序提供。”,并继续列出为什么
command
在其他必须内置的命令中没有列出的一些原因。)

那么
sudo command vim
为什么在Mac上的bash 4.4上工作?为什么sudo不能运行一个名为vim的shell函数?刚刚更新了一个答案,我也很困惑。它也可以在Centos 7上运行,Centos 7也有/usr/bin/command。因此,内置程序不能由sudo运行,也不能运行函数,但可执行的
/usr/bin/command
可以运行,这就是为什么它可以在它的位置工作?正确。它最常见的实现方式是一个内置的shell,但它只要求POSIX标准提供。因此,与POSIX兼容的操作系统需要确保无论使用哪个shell都可用。它可能主要与POSIX兼容,没有始终可用的
命令,这是一个阻止其完全兼容的错误。就像我说的,
命令
通常是由shell实现的(我不知道有没有),所以它的缺失通常不会被忽略(除非你像在shell函数中那样尝试从
env
使用它)。那么为什么
sudo命令vim
可以在我的Mac上的bash 4.4上工作呢?为什么sudo不能运行一个名为vim的shell函数?刚刚更新了一个答案,我也很困惑。它也可以在Centos 7上运行,Centos 7也有/usr/bin/command。因此,内置程序不能由sudo运行,也不能运行函数,但可执行的
/usr/bin/command
可以运行,这就是为什么它可以在它的位置工作?正确。它最常见的实现方式是一个内置的shell,但它只要求POSIX标准提供。因此,与POSIX兼容的操作系统需要确保无论使用哪个shell都可用。它可能主要与POSIX兼容,没有始终可用的
命令,这是一个阻止其完全兼容的错误。正如我所说,
命令
通常是由shell实现的(我不知道有哪个没有实现),因此它的缺失通常不会被忽略(除非您尝试从
env
使用它,就像您在shell函数中所做的那样)。