在 Vagrant 中启动 su 命令

在 Vagrant 中启动 su 命令

我有一台 Vagrant 机器,但我无法更改 vagrant 配置。

我想访问流浪机器,切换到超级用户,然后启动一些命令。如何一次性或在脚本文件中完成此操作?

现在我可以使用以下命令以 su 身份访问 vagrant:

vagrant ssh -c "cd /opt/path && sudo su"

但如果我启动其他命令,如下所示:

vagrant ssh -c "cd /opt/path && sudo su -c \"nvm use 10.16.0\""

我有这个日志:

bash: nvm: command not found
Connection to 127.0.0.1 closed.

相反,一个简单的回声效果很好。这个命令:

vagrant ssh -c "cd /opt/path && sudo su -c \"echo \"hello\"\""

日志:

hello
Connection to 127.0.0.1 closed.

答案1

问题可能是该nvm命令是从root用户.bashrc文件中设置的。当您运行时,除了和以及非 root 用户之外,su user不会使用用户的环境。HOMESHELLUSERLOGNAME

通常,您将使用 标志--loginsu使用用户环境(或简称-)。但是,当您想要获取文件时,这还不够,.bashrc因为.bashrc仅会为交互式 shell 获取文件。

我建议尝试将 nvm 代码从 移至/root/.bashrc并将/root/.bash_profile命令运行为vagrant ssh -c "cd /opt/path && sudo su --login -c \"nvm use 10.16.0\"".所以无论 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

只是搬到/root/.bash_profile

顺便说一句,我认为为用户安装 nvm 不是最好的主意root。安装它会安全得多vagrant

相关内容