SSH 사용자@IP sh환경 변수가 누락되었습니다.

SSH 사용자@IP sh환경 변수가 누락되었습니다.

나는 방법을 사용한다

SSH 사용자@IP sh [runme.sh]

스크립트를 원격으로 실행하려면 제대로 작동합니다. 그러나 문제가 발생했습니다. 즉, runme.sh에서 ~/.bashrc에 정의된 환경 변수를 가져올 수 없습니다. 스크립트를 로컬에서 시작하면 모든 것이 잘 작동하지만 ssh 명령을 사용하여 이러한 환경 구성을 얻으려면 어떻게 해야 합니까?

한 가지 가능한 방법은 줄을 추가하는 것입니다.

. ~/.bashrc

처음에는 모든 runme.sh에 있지만 클라이언트에서 많은 "runme.sh" 파일을 수정해야 합니다. 더 좋은 생각이 있나요?

답변1

~/.bashrc대화형으로 실행할 때는 bash 구성(별칭, 프롬프트 등)에 사용되는 파일 에 환경 변수를 정의하면 안 됩니다 . 환경 변수의 위치는 ~/.profile텍스트 모드에서 대화형 세션을 시작할 때 읽혀지며, 많은 시스템에서는 그래픽 모드에서도 읽혀집니다. 바라보다이 답변자세한 내용은.

bash 쉘을 실행하여 평소처럼 원격 시스템의 환경 변수를 설정하려면 다음을 수행하십시오.

ssh user@IP bash --login runme.sh

다른 쉘의 경우, 여러분의 쉘을 읽게 하십시오 .profile(어쩌면 /etc/profile):

ssh user@IP '. /etc/profile; . ~/.profile; exec runme.sh'

SSH를 통해 로컬 세션에서 환경 변수를 복사하려는 경우 가능하지만 일반적으로 서버 측에서는 비활성화됩니다. 읽다이 답변자세한 내용은.

답변2

이건 어때:

ssh user@IP -- '. ~/.bashrc; sh runme.sh'

sh와 의 차이점에 약간 주의를 기울여야 할 것입니다 bash. 및 대시 .bashrcsh같은 멋진 사용자 정의가 있는 경우 이 작업이 실패할 수 있습니다.

답변3

/etc/profileon 명령을 얻는 것은 어떻습니까 ssh?

ssh user@host "source /etc/profile; sh runme.sh"

채택된 답변이 문제

답변4

sh실제로 대상 시스템에서는 bash? 아마도 그렇지 않을 가능성이 높습니다. 이는 .bashrc자동으로 읽히지 않는 잠재적인 이유 중 하나입니다.

달리기가 도움이 bash runme.sh되나요 ? 그렇다면 그것은 당신의 문제입니다.

또한 누군가가 이미 지적했듯이 쉘이 쉘에서 대화식으로 실행되고 있는지 여부를 감지할 수 있는 것이 있으면 .bashrc변수를 이 코드 위에 설정해야 합니다.

관련 정보