여러 API 호출을 얻기 위해 컬을 사용하는 bash 스크립트를 단축하려면 다음을 수행해야 합니다.
curl --user $USER:$PASS https://api.example.com/foo -o 'foo.json'
curl --user $USER:$PASS https://api.example.com/bar -o 'bar.json'
curl --user $USER:$PASS https://api.example.com/baz -o 'baz.json'
다음 형식으로 사용하세요.
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
문제는 컬이 foo, bar 및 baz를 가져오지만 출력을 foo.json, bar.json 및 baz.json에 할당하지 않는다는 것입니다. 실제로 #1.json을 생성하고 출력을 stdout으로 파이프합니다. 작은 따옴표, 큰 따옴표를 사용해 보았으며 동일한 결과로 따옴표를 사용하지 않았습니다. 이것은 bash 스크립트 내에서 실행되지만, 컬 명령은 명령줄에 직접 입력할 때와 동일한 방식으로 동작합니다. 이것이 OS X 구문 문제입니까?
답변1
당신의 문제는 그 {...}
표현이반품유효한 쉘 구문. 예를 들어 다음을 실행합니다.
echo file/{one,two}
당신은 다음을 얻습니다:
file/one file/two
따라서 실행할 때:
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
{foo,bar,baz}
너한테 설명 받고껍데기, curl
실제로 명령줄을 수신합니다.
curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'
curl
표정이 보이지 않으니 , {...}
얻을 수 있는 마법은 없다 #1
. 해결책은 간단합니다. URL을 작은따옴표로 묶으면 됩니다.
curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'
작은따옴표는 문자열의 쉘 확장을 비활성화합니다.