LINUX.ORG.RU

sudo с полной инициализацией окружения для perlbrew

 ,


0

1

Как выполнить комманду из скрипта под другим пользователем? Реально под другим, с его полным окружением, так чтобы отработали все комады инициализации которые запускаются при обычном логине (su) под этого пользователя.

У этого пользователя настроен perlbrew, и sudo как то ломает процесс инициализации, так что perlbrew related stuff из под sudo не работает.

Вот примеры танцев с бубном:

sudo -u devuser -i "command"
sudo -u devuser -s "command"
sudo -u devuser sh -l -c "command"
sudo -u devuser bash --rcfile /home/devuser/.bashrc -l -c "command"
sudo -u devuser bash --rcfile /home/devuser/perl5/perlbrew/etc/bashrc -l -c "command"
sudo su -l devuser -c "command"
Ничего из этого не работает. Ещё варианты?

в .bashrc есть

source ~/perl5/perlbrew/etc/bashrc
а тот уже что то химичит с PATH. И не получается чтобы он нормально отработал.

/Linux 2.6.32/


Давайте для простоты уберём это страшное слово - perlbrew. Поставим вопрос таким образом: как можно выполнить другую команду в своём, специфическом окружении. То есть, чтобы вся муть с ручной инициализацией окружения (если это понадобится) не отражалась на текущем пользователе. Нужно как бы нырнуть в чужое окружение и, запустив команду, вынырнуть оттуда абсолютно чистеньким (в плане env). Может костыли какие?

koshi
() автор топика

sudo su - -c 'команда'

Если нужно без su - пиши скрипт, который сначала вызовет ~/.bashrc, а затем уже запустит твою программу.

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Просто sudo su не работает, выше был похожий вариант. Вот такой вот костылик пока поставил:

sudo su -l devuser -c "source /home/devuser/perl5/perlbrew/etc/bashrc; command"
почему автоматом .bashrc не выполняется так и не понял

koshi
() автор топика
Ответ на: комментарий от koshi

Тогда проверь что у пользователя devuser в качестве shell задан именно /bin/bash, а в ~/.bash_profile в явном виде вызывается ~/.bashrc

router ★★★★★
()
Ответ на: комментарий от router

shell, если не ошибаюсь, задаётся в /etc/passwd последним пунктиком. Там прописан /bin/bash А вот из .bash_profile :

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

koshi
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.