如何使用lxc exc以特定用户身份发出多个命令

时间:2019-06-19 15:38:01

标签: bash shell environment-variables nvm lxc

我的目标是从lxc容器外部的ubuntu文件夹中执行两个命令。

我已经尝试了几件事,但是我认为这个示例是我最接近的工作。

如果我跑步

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变量以相同的方式填充?

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=/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

我还在.bashrc文件的底部注意到了该nvm代码。据我了解,听起来.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

1 个答案:

答案 0 :(得分:1)

以下命令应该为您完成工作

lxc exec my-containter -- sudo --login --user ubuntu bash -ilc "cd /home/ubuntu/mydir && pwd && whoami && npm install && echo done"

.bashrc文件位于顶部下方

case $- in
    *i*) ;;
      *) return;;

如果非交互式bash,此代码将阻止执行.bashrc的其余部分。因此,要使其具有交互性,您应该添加-i标志