명령을 찾을 수 없음 오류 - bash

명령을 찾을 수 없음 오류 - bash
$ which sudo emacs
  /usr/bin/sudo
  /home/user1/local_build/bin/emacs
$ sudo emacs /etc/apache2/sites-available/000-default.conf 
  sudo: emacs: command not found
$ emacs /etc/apache2/sites-available/000-default.conf # Works fine
$ which emacs
  /home/user1/local_build/bin/emacs
$

편집하다:

방금 사용자를 PATH위해 첨부 했습니다 .root

$ whoami
 user1
$ which emacs
 /home/user1/local_build/bin/emacs
$ sudo tail -n 2 -F /root/.bashrc
 #fi
 export PATH=/home/user1/local_build/bin:$PATH
$ 
$ sudo emacs /etc/apache2/sites-available/000-default.conf
 sudo: emacs: command not found
$ 

편집하다:

# whoami
 root
# command -v emacs
 /home/user1/local_build/bin/emacs
# exit
 exit
$ whoami
 user1
$ command -v emacs
 alias emacs='emacs -q --load ~/.emacs.d/init.el'
$

편집하다

$ whoami
 user1
$ tail -n 2 -F .bashrc
 alias emacs='emacs -q --load ~/.emacs.d/init.el'

^C
$

편집하다:

Tigger의 답변 후에도 문제는 여전히 존재합니다.

$ tail -n 2 -F /home/user1/.bashrc
# alias emacs='emacs -q --load ~/.emacs.d/init.el'

^C
$ whoami # After logout/login bash
 user1
$ sudo emacs /etc/apache2/sites-available/000-default.conf
 sudo: emacs: command not found
$

편집하다:

7_R3X가 응답한 후,

# whoami
 root
# ls -ltr /etc/sudoers #Unable to modify this file
 -r--r----- 1 root root 755 Oct 14  2016 /etc/sudoers
# 

그런데, sudo gedit <etc's filename>잘 작동합니다.

질문:

emacsstart 를 사용할 수 없나요 sudo?

답변1

cylgalad가 댓글에서 언급한 오류의 원인은 /home/user1/local_build/bin해당 경로가 루트의 시스템 변수에 존재하지 않기 때문입니다 PATH.

문제의 원인은 /home/user1/local_build/bin변수에 디렉토리가 존재하지 않기 때문입니다 secure_path. 이 디렉터리를 추가하려면 파일을 secure_path편집 /etc/sudoers하고 기본 콘텐츠의 콘텐츠를 변경해야 합니다.

또는,

이 문제를 해결하려면 명령에서 전체 경로를 명시적으로 언급하여 emacs를 실행할 수 있습니다.

sudo /home/user1/local_build/bin/emacs /etc/apache2/sites-available/000-default.conf

또는 대안적으로

/home/user1/local_build/bin/루트의 에 경로를 추가할 수 있습니다 . 디렉토리 에 있는 파일 PATH에 다음 줄을 넣으면 됩니다 ..bashrc~/root/

PATH=$PATH:~/home/user1/local_build/bin

설명에서 언급한 Steeldriver의 이유로 루트에 디렉토리를 추가하면 PATH작동하지 않습니다 .

답변2

고전적인 예왜 사용하지 않습니까?which.

문제의 핵심은 입니다 which. 해당 내용 type emacs이나 내용을 확인하시면 command -v emacs문제가 해결될 것입니다.

편집: user 로 실행하려고 하면 root다음과 같은 일이 발생합니다.

su
<password>
command -v emacs

편집 2: 이것이 alias문제입니다. 사용자의 ~/.bashrc또는을 확인해야 합니다. 내 제안은 ~/.profile그것을 수정하거나 새로운 것을 만드는 것입니다.alias

편집 3:emacs즉, 사용자 폴더에 설치한 다음 root.

옵션 1

설치 emacs위치 /usr/local/bin- 올바른 위치. 액세스할 수 있는 애플리케이션을 저장하기 위해 사용자 폴더를 사용하지 마십시오 root.

옵션 2

emacs7_R3X의 답변에서 지적한 대로 실행 시 전체 경로를 사용하십시오 . 예를 들어:

sudo /home/user1/local_build/bin/emacs

옵션 3

다음을 추가하세요 alias.

alias emacs='/home/user1/local_build/bin/emacs'

이 금액을 합계 alias에 추가해야 합니다 . 존재하지 않는 경우 작성하십시오./home/user1/.bashrc/root/.bashrc/root/.bashrc

옵션 3은 시스템에 실질적인 혼란을 가져오기 시작하므로 권장되지 않습니다(제 생각에는). root쉘을 사용하지 않고도 가능합니다 bash. 왜 emacs사용자 폴더에 있는지 모르기 때문에 이 옵션을 포함시켰습니다.

또 다른 옵션은 옵션 3을 다음과 같이 좀 더 맞춤화된 것으로 변경하는 것입니다 alias.

alias emacsuser1='/home/user1/local_build/bin/emacs'

심지어

alias localemacs='/home/user1/local_build/bin/emacs'

이렇게 하면 비표준 설치 또는 사용자 정의 빌드를 실행하고 있음을 알 수 있습니다.

답변3

Emacs(sudo)의 실행을 추적하면 무슨 일이 일어나고 있는지 알아낼 수 있을 것이라고 생각했습니다.여기사용법에 대한 친절하고 친절한 설명입니다.

관련 정보