![비대화형 모드의 Bash 환경 변수](https://linux55.com/image/149628/%EB%B9%84%EB%8C%80%ED%99%94%ED%98%95%20%EB%AA%A8%EB%93%9C%EC%9D%98%20Bash%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98.png)
Raspbian에서 비대화형 콘솔에 대한 환경 변수를 정의하려고 합니다.
이론적으로는 ~/.bashrc, ~/.profile, /etc/bash.bashrc 또는 /etc/profile에 변수를 추가해야 합니다. 예를 들어, 다음 줄을 추가합니다(추가한 파일에 따라).
export VTEMP="set on ~/.bashrc"
export VTEMP="set on ~/.profile"
export VTEMP="set on /etc/bash.bashrc"
export VTEMP="set on /etc/profile"
모든 파일에 이 줄을 작성하고 ssh를 통해 기록하는 경우 echo $VTEMP return: set on ~/.profile 명령을 입력합니다.
Raspberry Pi로 이동하면 LXTerminal을 열고 다음 명령을 입력하세요. echo $VTEMP return: set on ~/.bashrc
그러나 ssh를 사용하여 비대화형 원격 작업을 수행하려고 하면 다음과 같이 작성합니다. out.txt 파일의 내용을 보면 아무것도 없고 비어 있습니다.ssh [email protected] "echo $VTEMP > out.txt"
비대화형을 사용할 때 VTEMP가 정의되지 않은 이유는 무엇입니까?
답변1
짧은 답변
rc 파일을 명시적으로 가져와 보십시오(그리고 작은따옴표를 사용하십시오).
ssh [email protected] 'source ~/.bashrc; echo $VTEMP > out.txt'
설명하다
여기에는 두 가지 문제가 있습니다. 먼저, 어떤 상황에서 어떤 rc(실행 명령) 파일을 얻어야 하는지에 대한 질문이 있습니다. 둘째, ssh에 어떤 명령을 전달해야 하는지에 대한 문제가 있습니다.
첫 번째 질문과 관련하여 비대화형 Bash 쉘 중 어느 것도 실행되지 않습니다 ~/.profile
. 일반적으로 비대화형 스크립트를 호출할 때 환경 변수 사용을 고려할 ~/.bashrc
수 있습니다 . BASH_ENV
Bash 매뉴얼에서는 다음과 같이 설명합니다.
다음 게시물에서도 이 문제에 대해 설명하고 있으니 확인해 보세요.
안타깝게도 이는 비대화형 SSH 명령을 실행할 때 적용되지 않을 수 있습니다. 자세한 내용은 다음 게시물을 참조하세요.
따라서 가장 좋은 해결책은 rc/profile 파일 중 하나의 자동 소스에 의존하지 않고 필요한 스크립트를 직접 실행하는 것입니다(예 source ~/.bashrc
: echo $VTEMP > out.txt
.
마지막으로 명령은 작은따옴표 대신 큰따옴표를 사용합니다. 이는 $VTEMP
변수가 원격이 아닌 로컬로 평가된다는 의미입니다. 작은따옴표를 사용해야 합니다. 이 모든 것을 종합하면 다음과 같은 해결책을 얻을 수 있습니다.
ssh [email protected] 'source ~/.bashrc; echo $VTEMP > out.txt'
답변2
명령을 이스케이프하는 것을 잊었기 때문에 출력이 비어 있습니다. 그것은해야한다:
ssh [email protected] 'echo $VTEMP > out.txt'
그렇지 않으면 값이 $VTEMP
쉘로 대체됩니다.현지의로컬 컴퓨터에서 정의하지 않았으므로 아무 것도 인쇄되지 않습니다.