2013-03-28 3 views
0

테스트 스크립트에서 여러 번 "curl"명령을 사용합니다. 코드를 최적화하기 위해 전역 변수에서 "컬 (curl)"옵션을 수행해야합니다.하나의 변수에 명령 매개 변수를 지정하는 방법은 무엇입니까?

"curl"의 사용 조건을 읽었으며 공백이 포함 된 매개 변수를 전달하려면 작은 따옴표로 묶어야합니다.

하지만 작동하지 않습니다.

$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'" 
$ curl $curl_options "http://google.com" 

출력 결과 :

curl: (6) Couldn't resolve host'' Opera ' 
curl: (6) Couldn't resolve host '(Windows' 
curl: (6) Couldn't resolve host 'NT' 
curl: (6) Couldn't resolve host '6 .1; ' 
curl: (6) Couldn't resolve host 'WOW64)' 
curl: (6) Couldn't resolve host 'Presto' 
curl: (6) Couldn't resolve host 'Version' 

답변

3

bash에서, 당신이 배열을 사용해야합니다. 당신은 예를 들어, 배열을 (사용할 수없는 경우

curl_options=(...) 
curl_options+=("--user-agent" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14") 

curl "${curl_options[@]}" "http://google.com" 

, 그들은 '때로 믿을 :이 방법을 사용하면 문자열에 공백이 옵션의 일부, 또는 분리하는 두 가지 옵션이 있는지 여부를 걱정할 필요가 없습니다 당신이)를 사용하는 쉘에서 사용할 수있는 t, 당신이 eval를 사용하여 다시 떨어질해야합니다 :

당신이 curl_options의 값을 설정하는 방법에 대해 매우주의해야 때문에이 좋지 않은
$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'" 
$ eval "curl $curl_options http://google.com" 

, eval에 대해 알 수없는 이유는 무엇입니까 무엇 값은 나타냅니다. 쉘은 단순히 값을 eval에 전달 된 문자열로 보간하고 eval을 실행합니다. 오식은 의도하지 않은 결과를 초래할 수 있습니다.

+0

나는이 코드를 오랫동안 깨달았습니다. 그러나 teamlead는이 코드를 승인하지 않았습니다. – user2219963

+0

'eval'을 사용하여 POSIX 호환 솔루션으로 업데이트했습니다. 바라건대, 누군가는 더 안전한 것을 만들 수 있지만,이 유스 케이스는 배열 지원을 추가하기위한 합리적인 이유 중 하나라고 생각합니다. – chepner

+0

나는 또 다른 변수가 \t html_content =' \t html_content ='평가' "http://google.com"를 $ curl_options 컬 "곱슬 곱슬 $ curl_options http://google.com"' 것은이 변형 될 것 무의미한 말. – user2219963

관련 문제