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의 자동 완성 기능을 사용할 수 있고 다른 명령에 대한 별칭도 가질 수 있으므로 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 "$@"

이로 인해 nocorrectsudo에 문제가 발생할 수 있습니다.

관련 정보