Comando não encontrado erro - bash

0
$ 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
$

Editar:

Eu adicionei PATH para root user, agora

$ 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
$ 

Editar:

# 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'
$

Editar

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

^C
$

Editar:

Após uma resposta de Tigrão, o problema ainda existe,

$ 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
$

Editar:

Após a resposta 7_R3X,

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

BTW, sudo gedit <etc's filename> funciona bem.

Pergunta:

Por que emacs não obtém lançamento usando sudo ?

    
por overexchange 25.06.2017 / 08:57

3 respostas

4

O cylgalad mencionou o motivo de seu erro no comentário de que o caminho /home/user1/local_build/bin não está presente na variável de sistema% rootPATH.

O motivo do seu problema é que o diretório /home/user1/local_build/bin não está presente na variável secure_path . Para adicionar este diretório em secure_path , você precisa editar o arquivo /etc/sudoers e alterar o conteúdo em seu conteúdo padrão.

OU alternativamente,

Para resolver o problema, você pode executar o emacs explicitamente mencionando seu caminho completo no comando:

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

ou alternativamente

você pode adicionar o caminho /home/user1/local_build/bin/ ao PATH da raiz. Basta colocar a seguinte linha no seu arquivo .bashrc localizado no diretório ~/root/ .

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

Adicionar diretório ao root PATH não funcionará pelos motivos mencionados por steeldriver no comentário. Espero que ajude.

    
por 25.06.2017 / 09:13
3

Exemplo clássico de por que não usar which .

O núcleo do problema é which . Se você verificar o que o type emacs ou command -v emacs diz, seu problema será resolvido.

Editar: Se você está tentando executar como o usuário root , o que acontece quando você tenta:

su
<password>
command -v emacs

Editar 2: Esse alias é o problema. Você precisa verificar ~/.bashrc ou ~/.profile para esse usuário. Ou alterou ou criou um novo alias seria minha sugestão.

Editar 3: Você está fazendo um material não padrão, que está instalando emacs em uma pasta de usuários e, em seguida, esperando poder executá-lo como root . Isso significa que você precisa de uma solução não padrão.

Opção 1

Instale emacs em /usr/local/bin - o local correto. Não use uma pasta de usuários para armazenar aplicativos que você espera que sejam acessíveis a root .

Opção 2

Use o caminho completo ao executar emacs - como indicado na resposta por 7_R3X. Por exemplo:

sudo /home/user1/local_build/bin/emacs

Opção 3

Adicione o seguinte alias :

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

Esse alias deve ser adicionado a /home/user1/.bashrc e /root/.bashrc . Se /root/.bashrc não existir, basta criá-lo.

A opção 3 não é recomendada (na minha opinião), pois está começando a criar uma bagunça real do seu sistema. Também é possível que root não use o shell bash . Eu não sei porque você tem emacs na pasta de usuários, então eu incluí esta opção.

Outra opção é alterar o alias da opção 3 para algo mais personalizado, como:

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

ou até mesmo

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

Dessa forma, você sabe que está executando uma versão não padrão de instalação ou personalizada.

    
por 25.06.2017 / 10:08
0

Eu acho que você pode ser capaz de ter uma idéia do que está acontecendo, stracing a execução do Emacs (sudo). Aqui é uma explicação agradável e amigável sobre como usá-lo.

    
por 26.06.2017 / 12:31