2013-03-25 6 views
0

다른 기계에서 쉘 스크립트를 실행해야합니다. 일반 호출 방법은 다음과 같이이다 :다른 기계에서 bash로 환경 변수를 전달하는 방법

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh 

인해 다른 스크립트 내가 그것을 매개 변수를 전달할 수 없습니다 build.sh에 의해 호출된다. 내가 알고있는 한, bash이 국지적으로 호출되면 환경 변수를 상속받습니다. 원격 컴퓨터에서 호출되는 경우에는 발생하지 않습니다.

누구든지 원격 환경에서 bash에 환경 변수를 전달할 수있는 방법을 알고 있습니까? 또는 로컬 환경 변수를 사용할 수있는 원격 시스템에서 build.sh을 호출하는 더 좋은 방법이있을 수 있습니다.

+1

실제'build.sh' 파일을 편집 할 수 없다면 환경 변수를 인수로 사용하는 래퍼 스크립트를 만들 수 있어야합니다. 래퍼 스크립트에서 파일을 내 보낸 다음 해당 서브 쉘에서 build.sh를 호출하면됩니다. . – Jite

+0

아니면 어떻게 생각 하느냐에 따라, 어떻게 선택 하느냐에 따라 'export VAR = $ VAR; export OTHERVAR = $ OTHERVAR ...; 원격 호스트에 보낼 명령으로 build.sh를 사용하십시오. 설정된 환경 변수는 그 서브 쉘에 대해서만 유효합니다. – Jite

답변

1

이 작업을 수행하는 가장 좋은 방법은 -o SendEnv=YOURVARIABLE을 사용하는 것이지만 서버가 가변적으로 허용하도록 설정된 경우에만 작동합니다.

당신은 명령 자체에 변수를 설정할 수 있습니다 : 그렇지 않은 경우, 여기 가능한 해결 방법은

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] \ 
    "export CFLAGS='$CFLAGS' LDFLAGS='$LDFLAGS'; bash" < $GIT_ROOT/chip/sw/scripts/build.sh 

이 어떤 특정 SSH 권한을 필요로하지 않습니다, 그러나 그것은 그들이 포함 할 수있는 경우 변수를 탈출 필요합니까 작은 따옴표. 당신은 많은 변수를 가지고 그들을 통해 정렬하지 않으려면

, 당신은 당신의 스크립트와 함께 전체 환경을 덤프 할 수 있습니다

{ set; cat "$GIT_ROOT/chip/sw/scripts/build.sh" } | \ 
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' 

이 원격 시스템에서 모든 로컬 변수와 함수를 설정 하지만 원하는 변수로 제한하지 않고 PATH 및 DISPLAY와 같은 변수를 무시하므로 문제가 발생할 수 있습니다.

관련 문제