macOS High Sierra의 터미널에서 환경 변수를 설정하는 데 문제가 있습니다.

macOS High Sierra의 터미널에서 환경 변수를 설정하는 데 문제가 있습니다.

macOS High Sierra를 실행하는 MacBook Pro에서 환경 변수를 설정하는 데 문제가 있습니다.

터미널에서 export VARIABLE_URL=example.com. 그런 다음 환경 변수가 로 설정되었는지 확인하려고 시도했지만 echo $VARIABLE_URL빈 결과가 반환되었습니다.

이제 터미널을 시작할 때마다 다음 메시지가 나타납니다.

Last login: Tue Apr  2 15:08:56 on ttys000
[1]   Done                    export VARIABLE_URL=example.com
[2]   Done                    appVersion=
[3]   Done                    osVersion=
[4]   Done                    deviceType=
[5]+  Done                    deviceId=
My-MacBook-Pro:~ me$

파일 에 변수를 추가해 보았지만 .bash_profile이 경우에도 변수가 제대로 설정되지 않습니다. 내가 할 때마다 echo $VARIABLE_URL공백이 반환됩니다.

내 에 다른 변수를 설정했지만 .bash_profile이것이 내 컴퓨터가 추가를 거부하는 유일한 변수입니다.

을 실행해도 printenv를 제외한 모든 환경변수가 표시됩니다 VARIABLE_URL.

이 환경 변수를 설정할 수 없는 이유는 무엇입니까?

편집: 내 내용은 다음과 같습니다 .bash_profile.

export BACKEND=example
export VARIABLE_URL=example.com
export HOST=localhost
export BASEURL=example
export SECRET=example
export USERNAME=example
export ACCESS_KEY=example

Edit2: 지금 터미널을 열면 표시되는 내용은 다음과 같습니다.

Last login: Wed Apr  3 13:06:20 on ttys000
+ export BACKEND=example
+ BACKEND=example
+ export 'VARIABLE_URL=example.com'
+ VARIABLE_URL='example.com'
+ appVersion=
+ osVersion=
+ deviceType=
+ clientType=
+ export HOST=localhost
+ HOST=localhost
+ export BASEURL=example
+ BASEURL=example
+ export SECRET=example
+ SECRET=example
+ export USERNAME=example
+ USERNAME=example
+ export ACCESS_KEY=example
+ ACCESS_KEY=example
+ deviceId=
My-MacBook-Pro:~ me$

printenv... 실행 시 반환되는 내용은 다음과 같습니다 .

TERM_PROGRAM=Apple_Terminal
USERNAME=example
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/g6/q9bwlzxn36jfb2j53c5t_t080000gn/T/
Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.GZQ9CxlO7F/Render
TERM_PROGRAM_VERSION=404.1
TERM_SESSION_ID=45B1D3A5-719E-4C24-9026-C52A374B3809
USER=me
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.nXK7LMtVZx/Listeners
BACKEND=example
SECRET=example
HOST=localhost
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS
PWD=/Users/me
LANG=en_US.UTF-8
XPC_FLAGS=0x0
XPC_SERVICE_NAME=0
SHLVL=1
HOME=/Users/me
LOGNAME=me
ACCESS_KEY=example
BASEURL=example
_=/usr/bin/printenv
My-MacBook-Pro:~ me$

최종 편집: 해결되었습니다! URL에 작은따옴표를 추가하면 성공했습니다.

export VARIABLE_URL='example.com'

이 질문에 표시된 URL은 실제로 내 .bash_profile. 실제 URL에는 실제로 여러 &문자가 포함되어 있습니다. 처음부터 설명을 드리지 못해 죄송합니다. 그렇게 했다면 문제가 더 빨리 해결되었을 거라 생각합니다. 그럼에도 불구하고, 도움과 제안을 해주신 모든 분들께 감사드리며, 이제 모든 문제가 해결되어 매우 기쁩니다.

답변1

내 가설:

실제 URL은 다음과 같이 HTTP GET 메소드를 사용합니다.

export VARIABLE_URL=example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz

와 는 ?URL &구문의 일부이지만 쉘은 이를 다르게 해석합니다. &이전 명령이 백그라운드에서 실행되도록 합니다. 또한 구분 기호이므로 하나의 명령 대신 여러 개가 있습니다. 첫 번째는

export VARIABLE_URL=example.com?foo=bar

이 값은 VARIABLE_URL.

또 다른 가정은 shopt -s nullglob다음과 같습니다 . ?GET 구문을 사용하면 $VARIABLE_URL패턴과 일치하는 파일이 없는 모든 디렉터리에서 따옴표가 없는 널 문자열로 확장됩니다 example.com?foo=bar.

당신이 원하는

export VARIABLE_URL='example.com?foo=bar&appVersion=&osVersion=&deviceType=&deviceId=&fizz=buzz'

여기서 작은따옴표는 쉘 ?&문자를 문자 그대로 처리합니다(큰따옴표도 이 특정 예에서 작동하지만 실제 URL은 모르겠지만 일반적으로 작은따옴표가 더 안전합니다). 추가적으로

echo "$VARIABLE_URL"

여기서 큰따옴표는 현재 디렉터리의 파일 ?과 상관없이 글로빙(변수 내용으로 인해 발생하는)을 방지합니다.nullglob

답변2

.bash_profile에서 얻은 출력을 보면 다음과 같은 내용이 있을 것으로 추측됩니다.

export VARIABLE_URL=example.com & appVersion= & osVersion= & deviceType= & deviceId= & somethingelse=

거기에 " " 문자가 있는 것을 원하지 않을 것입니다 &. 문자는 부적절하고 쓸모없는 방식으로 의미를 변경합니다. export공백으로 구분하여 단일 명령으로 여러 환경 변수를 정의할 수 있습니다 .

export VARIABLE_URL=example.com appVersion= osVersion= deviceType= deviceId= somethingelse=

export아니면 각 변수에 대해 별도의 명령을 사용하는 것이 더 명확할 수도 있습니다 .

export VARIABLE_URL=example.com
export appVersion=
export osVersion=
export deviceType=
export deviceId=
export somethingelse=

그런데 " "가 문제를 일으키는 이유 &는 명령 사이의 구분 기호이고 명령이 백그라운드에서 실행되기 전에 실행되기 때문입니다. 따라서 각 할당은 완전히 별도의 명령으로 처리되며(첫 번째 명령만 이고 export나머지는 내보내지 않은 셸 변수임) 마지막 명령을 제외한 모든 명령은 백그라운드에서 실행됩니다.별도의 프로세스에서, 정의는 해당 프로세스에 대해 로컬입니다(해당 프로세스가 완료되면 사라집니다). 이것이 바로 모든 "완료" 줄입니다. 즉, 백그라운드 프로세스가 완료되었음을 나타냅니다.

관련 정보