bash 스크립트에서 컬 출력 파일 변수가 작동하지 않습니다.

bash 스크립트에서 컬 출력 파일 변수가 작동하지 않습니다.

여러 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'

작은따옴표는 문자열의 쉘 확장을 비활성화합니다.

관련 정보