루프 컬 요청 bash 받기

루프 컬 요청 bash 받기

컬 스크립트를 자동화하고 결국에는 루프로 만들려고 합니다. 다음과 같은 루프를 사용할 수 없다는 것을 발견했습니다.

for i in `cat authors`
do
    curl *line here*   "www.test.com/autors?string="$i"&proc=39"
etc

CURL의 env glob 변수도

변수를 얻기 위해 컬을 사용하여 요청을 반복하는 방법이 있습니까?

curl -H "Host: www.test.com" -G "www.test.com/autors?string="author+name"&proc=39"

내가 얻는 것은 CURL의 트래픽 그래프뿐이며 좋은 결과는 없습니다. 나는 배쉬를 사용하고 있습니다

답변1

다음 구성을 시도해 보세요.

 while read author; do
      curl "http://www.test.com/authors?string=$author&proc=39"
 done < authors

이렇게 하면 백틱 등으로 작업을 수행해야 하는 수고를 덜 수 있습니다. 또한 원하는 경우 입력 파일에서 여러 열을 읽을 수 있지만 내 예와 같이 변수 하나만 지정하면 전체 행을 얻을 수 있습니다.

답변2

저자에는 공백과 같은 이름이 포함되어 있으며 점으로 추측됩니다.

여러 가지 일이 일어났습니다:

첫째, for루프를 실행하는 방식이 전혀 작동하지 않습니다. 이 시도:

 for i in `cat authors`
 do
    echo "Author = \"$i\""
 done

무슨 일이 일어났는지 알아? 공백당 하나의 값을 구분합니다 $i. 이름과 성이 있는 경우 이름만 포함된 행과 성만 포함된 행이 표시됩니다.

이제 이것을 시도해 보세요:

cat authors | while read i
do
    echo "Author = \"$i\""
done

좀 나아졌어? 이제 $i전체 라인이 여기에 있습니다. (예, 저는 "쓸모없는 고양이"를 알고 있지만 제가 어디로 가는지 보세요!)

둘째, 이러한 공백과 마침표를 유효한 URL 문자로 변환해야 할 수도 있습니다. 공백을 로 변환해야 합니다 %20. 다른 접근 방식을 취하겠습니다.

 sed 's/ /%20/g' authors | while read test
do
    echo "curl *line here* www.test.com/authors?string=$i&proc=39"
done

(이제 내가 왜 이걸 갖고 있는지 이해하셨을 겁니다 cat.)

그러면 컬 명령이 인쇄됩니다. 내가 하는 일은 authors파일을 가져와서 공백을 문자열로 변환하는 것 뿐입니다 %20. 이제 문자열 주위의 따옴표를 제거할 수 있는데, 이 경우에도 문제가 발생합니다.

이제 에코를 제거하고 실제 CURL 명령을 실행할 수 있습니다.

 sed 's/ /%20/g' authors | while read test
do
    curl *line here* www.test.com/authors?string=$i&proc=39
done

지금 무엇을 해야 하나*line here*대표하다? 이것이 당신의 선택 목록인가요? 아 당신은 있어요작가바꾸다작가귀하의 프로그램에서. 여기에 오타가 있었습니까? 아니면 프로그램이 다음과 같아야 합니까?

관련 정보