sudo: no Correct: 未找到命令

sudo: no Correct: 未找到命令

我在 Arch Linux 上使用 zsh 和 oh-my-zsh。我无法使用以下命令创建目录mkdir

edward@ArchLinux  ~ $ sudo mkdir -p /samba/raspberry
  [sudo] password for edward: 
  sudo: nocorrect: command not found

我知道它必须与 zsh 的自动完成功能和定义的别名有关,但无法弄清楚。

答案1

alias sudo='sudo '在一个文件中定义了这个别名,该别名位于文件source末尾,该别名覆盖了中定义的别名~/.zshrcalias sudo='nocorrect sudo'.oh-my-zsh/lib/correction.zsh

alias sudo='nocorrect sudo'zsh 的自动完成功能需要它才能工作
更多:如何在 zsh 中禁用 sudo [命令] 的自动更正?

但同时我需要alias sudo='sudo '以下命令的别名sudo才能工作
更多:使用 sudo 时从 .bashrc 文件加载别名
请注意alias sudo='sudo ',也适用于 zsh

因此,我在使用时可以拥有 zsh 的自动完成功能,也可以拥有(其他命令的)别名,因此sudo我现在禁用了 zsh 的自动完成功能。

希望我说得清楚,不要混淆。

答案2

只是添加@edward-torvalds 的回答,

在您的 .aliases 文件中,对于某些人来说,选项卡的使用可能不够明显。为了更好地阅读,您的别名定义可以这样写:

alias sudo=$'nocorrect sudo\t'

但是,我确实遇到了尾随问题空间,但不是尾随标签

alias sudo='sudo '
alias sudo='nocorrect sudo '

上述别名导致错误,如下:

~$ which mkdir 
mkdir: aliased to nocorrect mkdir -p -pv

~$ which sudo
sudo: aliased to nocorrect sudo

~$ alias sudo                  
sudo='nocorrect sudo '

~$ sudo mkdir /tmp/foo
sudo: nocorrect: command not found

因此,这会起作用alias sudo='sudo '

但我更喜欢alias sudo=$'nocorrect sudo\t' 1K+ 行的 zshrc,后者太简单了;)

...如果有人能说出原因,请发表评论!

答案3

alias sudo='sudo '使用别名的一个技巧nocorrectnocorrect在您的路径中创建这个小脚本:

#!/bin/sh
exec "$@"

这会给nocorrectsudo 带来麻烦。

相关内容