未找到命令错误 - 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
$

编辑:

我已经PATHroot用户附加了,刚才

$ 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/binroot 的系统变量中不存在该路径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 emacscommand -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) 的执行情况来了解发生了什么。这里是关于如何使用它的一个很好且友好的解释。

相关内容