sudo:命令:在CentOS 6上找不到命令

时间:2018-11-01 15:37:26

标签: bash centos6

MVCE:

bash 4.1.2Centos 6.10上(因为我们是怪物)。

sudo command vim

返回

sudo: command: command not found

我不明白为什么。在bash 4.4.23Mac OS High Sierra上可以正常工作。用谷歌搜索非常困难,因为人们使用“命令”作为他们正在谈论的各种命令的占位符。

实际问题:

我有一个名为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 个答案:

答案 0 :(得分:2)

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作为内置外壳的操作系统可能就足够了。 (POSIX规范指出“该命令实用程序很可能是作为常规内置程序提供的。”,并继续列出了为什么在其他必须< / em>是内置的。)