컬 스크립트를 자동화하고 결국에는 루프로 만들려고 합니다. 다음과 같은 루프를 사용할 수 없다는 것을 발견했습니다.
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*
대표하다? 이것이 당신의 선택 목록인가요? 아 당신은 있어요작가바꾸다작가귀하의 프로그램에서. 여기에 오타가 있었습니까? 아니면 프로그램이 다음과 같아야 합니까?