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

관련 정보