псевдонимы не обрабатываются при sudo в mac? [закрыто]

У меня есть следующие псевдонимы в / 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'

Я только что добавил последние три псевдонима. Теперь, когда я выполняю

sudo su : я не получаю эти псевдонимы.

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

но когда я не использую sudoing , я получаю эти псевдонимы (это оболочка bash). Но не запускает 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
0
задан 29 April 2015 в 03:48

2 ответа

bash оболочка только читает /etc/profile, когда вызвано как оболочка входа в систему , который su обычно не делает - необходимо было бы вызвать su с -, -l, или --login опция. От 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.

Видят man bash для полного изложения, о котором файлы запуска читаются интерактивным входом в систему, интерактивным невходом в систему и неинтерактивными оболочками.

1
ответ дан 2 August 2019 в 20:47

Сделать те псевдонимы доступными для root, можно поместить их в /root/.bash_aliases.

Однако, если просто необходимо выполнить те псевдонимы как root от Вашего пользователя можно просто поместить их в ~/.bash_aliases и добавьте sudo в начале команды каждого псевдонима:

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'

Также я не заметил это сначала, но использование ll как псевдоним для ls -lG сокрушил бы deafult ll поведение псевдонима также, если начато /root/.bash_profile и, если начато ~/.bash_profile, где это установлено как псевдоним ls -la: таким образом, если Вы не хотите сокрушить llповедение псевдонима для пользователя, для которого Вы закончите тем, что добавили те псевдонимы, необходимо изменить его имя на что-то еще, например, на lg:

alias lg='sudo ls -lG'
0
ответ дан 2 August 2019 в 20:47

Другие вопросы по тегам:

Похожие вопросы: