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
.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
.