그래서 저는 이 컬 명령을 가지고 있습니다. 하지만 API 키를 api.txt라는 파일에 저장하고 값이 있는 컬 명령에 로드하고 싶습니다.
api.txt 파일에는 다음이 포함됩니다.
'X-Api:<API-KEY>'
이 명령은 작동합니다.
curl -H 'X-Api:<API-KEY>' -T file.zip "https://URL"
시험을 마친:
curl -H “Content-Type: text/plain” -d “api.txt” -T file.zip "https://URL"
에러 발생됨:
"errors" : [ {
"status" : 401,
"message" : "Unauthorized"
} ]
}%
질문:
- 실제 api 키나 api.txt의 예상 행을 로드하여 컬 명령으로 구문 분석하려면 어떻게 해야 합니까?
- 이렇게 하면 되나요? 아니면 더 좋은 방법인가요?
답변1
curl -H "$(cat api.txt)" -T file.zip "https://URL"
또는 입력 파일에서 모든 백분율 기호와 작은따옴표를 제거합니다.
curl -H "$(tr -d "'%" api.txt)" -T file.zip "https://URL"
또는 시작 '
과 '%
끝만 제거합니다.
curl -H "$(sed -E "s/^'|'%$//g" api.txt)" -T file.zip "https://URL"
추신: 저는 처음에 api.txt에서 후행 줄 바꿈을 피하기 위해 이 작업을 두 줄로 수행해야 한다고 생각했습니다.
API_KEY=$(cat api.txt)
curl -H "$API_KEY" -T file.zip "https://URL"
그러나 bash는 입력 파일 끝에서 개행 처리가 향상된 것 같습니다.명령 대체- 즉, 더 이상 입력이 없으면 삭제됩니다. 저는 bash 5.1.16을 사용하고 있습니다. 다른 쉘이나 다른 버전의 bash를 사용하는 경우 두 줄 버전을 사용해야 할 수도 있습니다.
답변2
curl
올바른 형식의 파일에서 헤더 읽기를 지원합니다 @
. 이는 분기보다 더 효율적이며 잠재적으로 셸이 필요 없이 cat
더 간단하고 효율적이며 보안 결함이 덜 발생하는 exec(3)
실행 호출을 위해 셸을 제거할 수 있습니다.curl
system(3)
curl -H '@api.txt' -T file.zip "https://..."
간단한 Bourne 쉘에는 @
인용이 필요하지 않지만 특정 쉘이 이 역할에 대해 특정 작업을 수행하는 것을 방지하는 것입니다. 멋진 쉘(예 zsh
: )을 사용하는 경우 인용 규칙을 확인하여 어떤 문자가 특별한 의미를 가지고 있는지 확인하거나 모든 것을 적극적으로 인용하십시오.