Использование переменных окружения с su -c

Я пытаюсь бежать nvm как другой пользователь из скрипта bash. Он уже установлен и NVM_DIR переменная окружения установлена ​​в /home/user/.bashrc:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

Используя равнину su работает:

root@ubuntu:~# su user
user@:/root$ echo $NVM_DIR
/home/user/.nvm

Попытка того же самого с su -c не работает, хотя:

root@ubuntu:~# su user -c 'echo $NVM_DIR'

root@ubuntu:~#

Как я могу использовать переменные среды с su -c?

2 ответа

Решение

Поведение, которое вы наблюдаете, потому что su -c 'command' не выполняет command в интерактивной оболочке.

поскольку su По-видимому, не предоставляет возможности сделать это, вероятно, самый чистый способ сделать то, что вы хотите, это переместить переменные среды NVM в отдельный файл, называемый nvm_envs скажем, и источник, который явно, например,

su user -c '. ~/nvm_envs && echo $NVM_DIR'

Если вы хотите, чтобы интерактивные оболочки bash имели одинаковую среду, поставьте тот же файл из .bashrc например, файл

if [ -r "$HOME/nvm_envs" ]; then
  . "$HOME/nvm_envs"
fi

(Это именно так, как по умолчанию .profile файл условно исходит от пользователя env_vars файл: вы можете использовать этот файл вместо этого, если вы предпочитаете.)

Пытаться:

      sudo -i -u user sh -c 'echo $NVM_DIR'
Другие вопросы по тегам