STDIN에서 읽고 즉시 데이터를 사용하거나(계속 읽는 동안) zbar를 사용하여 URL을 엽니다.

STDIN에서 읽고 즉시 데이터를 사용하거나(계속 읽는 동안) zbar를 사용하여 URL을 엽니다.

STDIN에서 줄을 읽고 처리해야 합니다. 다음과 같이 할 수 있습니다.

<print lines to STDOUT> | while read line; do
   <process $line>
done

그러나 이것이 의미하는 바는첫 번째모든 라인이 인쇄되고 파이프됩니다.그 다음에처리됩니다. 나는 다음 줄이 STDOUT으로 전송되기 전에 각 줄을 즉시 처리하고 싶습니다.

행이 생성될 때(예: 로그 파일) 처리해야 하는 경우 유용할 수 있습니다. 내 임무는시바(경고! 이 페이지는 Firefox와 충돌합니다...) 여러 개의 QR 코드를 스캔하고 Firefox에서 해당 URL을 엽니다. 실행 중인 경우 zbarcam --raw웹캠을 사용하여 QR 코드를 스캔합니다. QR 코드가 발견되면 URL이 즉시 STDOUT에 인쇄되지만 zbarcam은 종료되지 않습니다. 그래서 나는 이 줄을 읽고 여기저기 돌아다니고 싶습니다 firefox $url(그러나 다른 URL을 기다리지는 않습니다).

내가 찾은떨어져 있는, 하지만 이 작업을 더 쉽게 수행할 수는 없는지 궁금합니다. 기본적으로 그는 zbarcam임시 파일 에 출력을 쓰고 그 안에 뭔가가 기록될 때까지 기다립니다.

zbarcam --raw > tmpfile &
...
while [[ ! -s $tmp ]] ; do
  sleep 1
done

임시 파일이나 루프 없이 이 작업을 수행할 수 있습니까 sleep 1?

답변1

첫 번째 시도는 성공했습니다.

tail -f temp.file | while read LINE; do firefox $LINE; done

그런 다음 다른 터미널에서 tail -f가 STDOUT에 한 줄을 인쇄하도록 임시 파일에 추가합니다.

echo 'google.com' >> temp.file

Firefox는 이 작업을 수행할 때마다 새 탭을 엽니다.

답변2

몇 가지 노력 끝에 부분적인 해결책을 찾았습니다.

zbarcam --raw|xargs -L1 firefox

핵심 부분은 하나의 행만 읽도록 -L1지시하는 매개변수입니다. xargs첫 번째 QR 코드를 읽은 후 Firefox를 실행합니다. zbar 그런 다음 여전히 실행되지만 두 번째 QR 코드를 스캔할 수 없습니다( xargs어떻게든 다시 호출해야 함).

답변3

매우 가깝습니다:

zbarcam --raw | xargs -n 1 chromium-browser

이것은 나에게 잘 작동하며 각 스캔은 새 탭에서 끝납니다.

관련 정보