xargs
옵션과 함께 사용 하고 있습니다 --max-args=0
(또는 -P 0
).
그러나 공정의 출력은 stdout
적절한 라인 분리를 고려하지 않고 스트림으로 병합됩니다 . 그래서 종종 다음과 같은 줄로 끝납니다.
<start-of-line-1><line-2><end-of-line-1>
전체 출력 에서 패턴을 사용 egrep
하면서 결과가 엉망이됩니다.^
xargs
강제하는 몇몇 방법이있다 xargs
(어느 한 프로세스의 출력은 연속 한, 임의의 순서로)의 처리 순서를 출력 쓰기는?
아니면 다른 해결책?
편집 : 사용 사례에 대한 자세한 내용 :
다른 호스트에서 웹 페이지를 다운로드하고 구문 분석하고 싶습니다. 모든 페이지를로드하는 데 약 1 초가 걸리고 수십 페이지가 있으므로 요청을 병렬화하려고합니다.
내 명령은 다음과 같은 형식입니다.
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
호스트 IP ($ IPs 변수)와 다른 데이터는 포함 된 bash 파일에서 가져 오기 때문에 Perl과는 다른 bash를 사용합니다.
이것에 대한 해결책은 힘들 것입니다. 각 프로세스의 표준 출력에 대해 다른 파일 설명자를 사용해야하며 작은 서버를 사용하여 라인을 수집해야합니다.
—
Stéphane Gimenez
xargs
그런 기능을 제공하지 않는 것 같습니다.
@Caleb 당신이 간다, 이것이 도움이되기를 바랍니다 :-)
—
Christoph Wurm
분명히 가벼운 솔루션은 아니지만 아마도
—
Stéphane Gimenez
make
작업 기능을 사용할 수 있습니다 make
. 출력 라인을 올바르게 병합 한다고 생각 합니다.
도움
—
iruvar
--line-buffered
을 egrep
주기 위해 깃발을 추가합니다
xargs
.