Vagrantでsuコマンドを実行する

Vagrantでsuコマンドを実行する

Vagrantマシンがありますが、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 以外のユーザーを除き、ユーザー環境は使用されません。root.bashrcsu userHOMESHELLUSERLOGNAME

通常、フラグを使用してユーザーエクスペリエンス(または単に)を使用--loginします。ただし、対話型シェルに対してのみファイルをインポートするため、ファイルをインポートする場合はこれだけでは不十分です。su-.bashrc.bashrc

nvmコードをからに移動し/root/.bashrc、次のよう/root/.bash_profileにコマンドを実行することをお勧めしますvagrant ssh -c "cd /opt/path && sudo su --login -c \"nvm use 10.16.0\"".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

関連情報