Моя цель - выполнить две команды в определенной папке как ubuntu вне его контейнера lxc.
Я пробовал пару вещей, но я подумал, что этот пример наиболее близок к работе.
Если я запускаю
root@host$ lxc exec my-containter -- sudo --login --user ubuntu eval "cd /home/ubuntu/mydir && pwd && whoami && env && npm install && echo done"
Я получаю сообщение об ошибке установки npm, которое не может найти какой-либо модуль, но похоже, что я правильный пользователь
Однако еслиЯ вручную делаю это, как два шага, это работает ... но я пытаюсь поместить это в скрипт bash, чтобы я мог продолжать выполнять операции на хосте, поэтому я думаю, что он мне нужен как один.
root@host$ lxc exec my-containter -- sudo --login --user ubuntu
ubuntu@my-container$ eval "cd /home/ubuntu/mydir && pwd && whoami && env && npm install && echo done";
Я обнаружил, что моя переменная окружения PATH отличается в этих двух ситуациях, а в той, где происходит сбой, отсутствует конкретный путь для nvm / npm.Я попытался экспортировать его во время команды eval, но кажется, что доступные мне ресурсы уже найдены?Что можно сделать, чтобы переменная PATH заполнялась одинаково в однострочном сценарии?
PATH из 1 строки (неинтерактивно)
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/snap/bin:/snap/bin
PATH из 2 строк (интерактивный)
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/.nvm/versions/node/v8.9.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
Я также заметил этот код nvm внизу моего файла .bashrc.Из того, что я прочитал, звучит так, что файл .bashrc выполняется только в интерактивном режиме.
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion