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
.bashrc
su user
HOME
SHELL
USER
LOGNAME
通常、フラグを使用してユーザーエクスペリエンス(または単に)を使用--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
。