sudo:いいえ正しい:コマンドが見つかりません。

sudo:いいえ正しい:コマンドが見つかりません。

私は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 [command]自動修正を無効にする方法は?

ただし、同時により多くのタスクを実行するには、alias sudo='sudo '次のコマンドのエイリアスが必要です。sudo
sudoを使用するとき.bashrcファイルからエイリアスをロードする
これはalias sudo='sudo 'zshでも動作します。

したがって、zsh を使用するときに zsh のオートコンプリート機能を使用でき、他のコマンドのエイリアスも持つことができるため、sudozsh のオートコンプリート機能が無効になりました。

混乱することなく明確に説明してください。)

答え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 'エイリアスを使用する1つの秘密は、パスに次の小さなスクリプトを作成することnocorrectです。nocorrect

#!/bin/sh
exec "$@"

これはnocorrectsudoに問題を引き起こす可能性があります。

関連情報