我在 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
末尾,该别名覆盖了中定义的别名~/.zshrc
alias 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 '
使用别名的一个技巧nocorrect
是nocorrect
在您的路径中创建这个小脚本:
#!/bin/sh
exec "$@"
这会给nocorrect
sudo 带来麻烦。