web-dev-qa-db-ja.com

sudo:nocorrect:コマンドが見つかりません

ArchLinuxでzshとoh-my-zshを使用しています。 mkdirを使用してディレクトリを作成できません

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

私はそれがzshの自動補完機能と定義されたエイリアスで何かをしなければならないことを知っていますが、理解できません。

6
Edward Torvalds

このエイリアスは、alias Sudo='Sudo 'で定義されている~/.zshrcを上書きしたalias Sudo='nocorrect Sudo'ファイルの最後でsourcedしたファイルに.oh-my-zsh/lib/correction.zsh定義されています。

alias Sudo='nocorrect Sudo'は、zshのオートコンプリート機能が機能するために必要です
詳細: zshでSudo [コマンド]の自動修正を無効にする方法は?

しかし同時に、Sudoに続くコマンドのエイリアスが機能するためにはalias Sudo='Sudo 'が必要です
詳細: Sudoの使用中に.bashrcファイルからエイリアスをロード
alias Sudo='Sudo 'はzshでも機能することに注意してください

したがって、Sudoを使用しているときに、zshのオートコンプリート機能を使用するか、(他のコマンドの)エイリアスを使用することができます。これで、zshのオートコンプリート機能を無効にしました。

私は明確で混乱しないことを願っています。

11
Edward Torvalds

@ edward-torvaldsからの回答に追加するだけで、

.aliasesファイルでは、一部のユーザーに対してタブの使用が十分に表示されない場合があります。エイリアス定義は、読みやすくするためにそのように書くことができます。

alias Sudo=$'nocorrect Sudo\t'

ただし、末尾のspaceには問題がありましたが、末尾のtabには問題がありませんでした。

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では、後者は単純すぎます;)

...誰かが理由を説明できる場合は、コメントしてください!

0
mike