컬 명령의 출력을 환경 변수로 파이프하고 다른 컬 명령에서 사용하는 방법은 무엇입니까?

컬 명령의 출력을 환경 변수로 파이프하고 다른 컬 명령에서 사용하는 방법은 무엇입니까?

액세스 토큰을 얻을 수 있는 REST 엔드포인트가 있습니다. 액세스 토큰(JSON 웹 토큰, JWT)을 가져오고 값을 환경 변수로 내보내려면 다음을 수행합니다.

export ACCESS_TOKEN=$(curl -i -H 'Content-Type: application/json' -X POST -d @credentials.json http://localhost:8080/api/user/login)

그런 다음 이 토큰을 콘솔에 에코하여 echo $ACCESS_TOKEN다음과 같은 결과를 얻습니다.

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCISImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUIOiJodHRwIiwicG9ydCI6IjgwODAILCJp Y ​​XQiOjE0NjgzNzg5NDV9.COGBYBrx3oQva2kIiObBOYkEFIL2BODcrSivxWvhuLS-aLsrMGO2z2aCddpwS2yZUB88Q3GOIU8QklbnfRMprQ

첫 번째 문자 앞에 공백이 있다는 점에 유의하세요. 콘솔에서 직접 값을 내보낸 다음 다시 에코하면 공간이 여전히 남아 있기 때문에 이것이 문제가 되지 않는다고 생각합니다.

export ACCESS_TOKEN=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIiwicG9ydCI6IjgwODAiLCJpYXQiOjE0NjgzNzg5NDV9.COGBYBrx3oQvA2kIiObBOYkEFIL2BODcrSivxWvhuLs-aLsrMGO2z2aCddpwS2yZUB88Q3GOIU8QklbnfRMprQ

이제 이 토큰을 사용하여 REST 엔드포인트를 테스트하고 다음과 같은 작업을 시도해야 합니다.

curl -i \
 -H 'x-access-token: '$ACCESS_TOKEN'' \
 -X POST -d @mydata.json \
 http://localhost:8080/api/data

그러나 다음과 같은 결과가 나타납니다.

컬: (7) 서버에 연결할 수 없습니다
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: 서버
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: Access-Control-Allow-Methods
컬: (6) 호스트를 확인할 수 없습니다: POST,
컬: (6) 호스트를 확인할 수 없습니다: PUT,
컬: (6) 호스트를 확인할 수 없습니다: GET,
컬: (6) 호스트:옵션을 확인할 수 없습니다.
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: Access-Control-Max-Age
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: Access-Control-Allow-Headers
컬: (6) 호스트를 확인할 수 없습니다: 원본,
컬: (6) 호스트를 확인할 수 없습니다: X-Requested-With,
컬: (6) 호스트를 확인할 수 없습니다: 콘텐츠 유형,
컬: (6) 호스트를 확인할 수 없습니다: 수락,
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: Access-Control-Allow-Credentials
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: 콘텐츠 유형
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 구문 분석할 수 없습니다: content-length
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다: 날짜
컬: (6) 호스트를 확인할 수 없습니다: 수요일,
컬: (7) 호스트를 확인할 수 없음: 수요일,
컬: (6) 호스트를 확인할 수 없습니다: 7월
컬: (7) 호스트를 확인할 수 없음: 7월
컬: (6) 호스트를 확인할 수 없습니다: 03:02
Curl: (3) URL에 잘못된 문자가 있습니다.
Curl: (3) URL에 잘못된 문자가 있습니다.
컬: (6) 호스트를 확인할 수 없습니다. eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIwicG9 ydCI 6IjgwoDAiLCJpYXQiOjE0NjgzNzg5NDV9.COGBYBrx3oQvA2kIiObBOYkEFIL2BODcrSivxWvhuLS-aLsrMGO2z2aCd
HTTP/1.1 100 계속

HTTP/1.1 403 금지됨
서버: Apache-Coyote/1.1
접근 제어 허용 메소드: POST, PUT, GET, OPTIONS, DELETE
액세스 제어 최대 기간: 3600
액세스 제어 허용 헤더: Origin, X-Requested-With, content-type, accept, x-access-token
액세스 제어 허용 자격 증명: true
콘텐츠 길이: 0
날짜: 2016년 7월 13일 수요일 03:23:04 GMT
연결: 폐쇄

export ACCESS_TOKEN=....쉘에서 똑같은 명령을 직접 실행 하면 curl모든 것이 잘 작동합니다.

또한 내보내기를 sh파일에 넣은 다음 curl위의 명령을 실행하면 작동합니다.

#!/bin/bash
export ACCESS_TOKEN=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MTBlMjRiYWZmZTY0NjMyOGRiNjg1N2ViMTdlZTE1NCIsImFkZHIiOiIwOjA6MDowOjA6MDowOjEiLCJzY2hlbWUiOiJodHRwIiwicG9ydCI6IjgwODAiLCJpYXQiOjE0NjgzNzkwMjB9.lV6jSf9w5_AbsPrNcWcgQpS-DWQVxnH65u06BDGIyL-ST_gg4xXZ2KLAs-kbwckRB3OFy637G1op6PZ2tpHdUQ

내가 여기서 뭘 잘못하고 있는지 아시나요?

답변1

문제는 사용법에 있습니다. -i이 옵션은 출력에 헤더를 포함하기 때문입니다.

이상하게도 이렇게 하지 않으면 echo "$ACCESS_TOKEN"REST 응답을 오염시키는 반환된 헤더가 표시되지 않습니다.

그냥 제거 -i하면 작동됩니다.

관련 정보