aliases não foram escolhidos quando o sudo no mac? [fechadas]

0

Eu tenho os seguintes aliases em /etc/profile .

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
        eval '/usr/libexec/path_helper -s'
fi

if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
fi

alias startapache="/usr/local/Cellar/httpd22/2.2.29/bin/apachectl start"
alias stopapache="/usr/local/Cellar/httpd22/2.2.29/bin/apachectl stop"

alias ll='ls -lG'

Acabei de adicionar os três últimos aliases. Agora quando eu faço

sudo su : eu não recebo esses aliases encontrados.

sh-3.2# startapache
sh: startapache: command not found

mas quando eu não sudoing , eu recebo esses aliases (Isso é shell bash). Mas isso não inicia o apache.

local:~ 112019$ startapache 
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
    
por brain storm 29.04.2015 / 01:43

2 respostas

1

O shell bash só lê /etc/profile quando invocado como shell de login , que su normalmente não faz - você precisaria invocar su com o - , -l ou --login opção. De man su :

   -, -l, --login
       Provide an environment similar to what the user would expect had
       the user logged in directly.

       When - is used, it must be specified as the last su option. The
       other forms (-l and --login) do not have this restriction.

Consulte man bash para obter detalhes completos sobre quais arquivos de inicialização são lidos por login interativo, não interativo e shells não interativos.

    
por steeldriver 29.04.2015 / 01:53
0

Para disponibilizar esses aliases para root , você pode colocá-los em /root/.bash_aliases .

No entanto, se você só precisar executar esses aliases como root do seu usuário, basta colocá-los em ~/.bash_aliases e adicionar sudo no início de cada comando de alias:

alias startapache="sudo /usr/local/Cellar/httpd22/2.2.29/bin/apachectl start"
alias stopapache="sudo /usr/local/Cellar/httpd22/2.2.29/bin/apachectl stop"
alias ll='sudo ls -lG'

Além disso, eu não percebi isso inicialmente, mas usar ll como um alias para ls -lG sobrecarregaria o comportamento do aldeído ll se configurado em /root/.bash_profile e se definido em ~/.bash_profile , onde é definido como um alias de ls -la : so, a menos que você queira sobrecarregar o comportamento de alias de ll para o usuário, você acabará adicionando esses aliases a, você deve alterar seu nome para outra coisa, por exemplo para lg :

alias lg='sudo ls -lG'
    
por kos 29.04.2015 / 02:25