$ 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>
工作正常。
问题:
为什么emacs
无法使用 启动sudo
?
答案1
cylgalad 在评论中提到了错误的原因,即/home/user1/local_build/bin
root 的系统变量中不存在该路径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/
到 root 的PATH
.只需将以下行放入.bashrc
位于~/root/
目录的文件中即可。
PATH=$PATH:~/home/user1/local_build/bin
由于 Steeldriver 在评论中提到的原因,将目录添加到根目录PATH
将不起作用。
答案2
经典例子为什么不使用which
。
问题的核心是which
。如果您检查内容type emacs
或command -v emacs
内容,那么您的问题就会得到解决。
编辑:如果您尝试以用户身份运行root
,当您尝试时会发生什么:
su
<password>
command -v emacs
编辑2:这alias
就是问题所在。您需要检查该用户的~/.bashrc
或。我的建议是~/.profile
修改它或创建一个新的。alias
编辑3:您正在做非标准的事情,即安装emacs
在用户文件夹中,然后期望能够将其作为root
.这意味着您需要一个非标准解决方案。
选项1
安装emacs
到/usr/local/bin
- 正确的位置。不要使用用户文件夹来存储您希望可以访问的应用程序root
。
选项2
运行时使用完整路径emacs
- 正如 7_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
不使用shell也是可能的bash
。我不知道为什么你emacs
在用户文件夹中,所以我包含了这个选项。
另一种选择是将选项 3 更改alias
为更自定义的内容,例如:
alias emacsuser1='/home/user1/local_build/bin/emacs'
甚至
alias localemacs='/home/user1/local_build/bin/emacs'
这样您就知道您正在运行非标准安装或自定义版本。
答案3
我认为您也许可以通过跟踪 Emacs (sudo) 的执行情况来了解发生了什么。这里是关于如何使用它的一个很好且友好的解释。