我有一台 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
不会使用用户的环境。HOME
SHELL
USER
LOGNAME
通常,您将使用 标志--login
来su
使用用户环境(或简称-
)。但是,当您想要获取文件时,这还不够,.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
。