bash에서는 프로그램 (gollum)을 시작하고 stderr (포트 번호)의 일부를 다른 프로그램의 인수로 사용하려고합니다. stderr을 stdout으로 리디렉션하고 grep 및 sed를 사용하여 출력을 필터링합니다. 나는 표준 출력에 결과를 얻을 : 그것은 '56343'를 반환하고 골룸은 서버와 같이 계속 실행장기 실행 프로세스에서 영향을주지 않는 xargs로 파이핑
gollum -p0 2>&1| sed -n -e "s/.*port=//p"
.
그러나 이것을 xargs와 함께 다른 프로그램 (예 : 에코이지만 나중에 포트 번호가있는 인터넷 탐색기를 실행하는 데 사용하려는 경우)의 인수로 사용하려면 작동하지 않습니다.
gollum -p0 2>&1| sed -n -e "s/.*port=//p" | xargs -n1 echo
아무런 일도 일어나지 않습니다. 그 이유를 아십니까? 아니면 똑같은 일을 할 생각이 다른가요?
도움 주셔서 감사합니다.
배쉬는 파이프 라인의 모든 아이들이 죽을 때까지 기다리고, '골룸'은 죽지 않는다 (원 링이 그를 계속 살아 가게한다)? –
실제로는 골룸이 죽지 않기 때문입니다. 나는 다른 곳에서 죽이고 그것은 작동한다. 포트 번호가 반환 되 자마자 두 번째 프로그램을 어떻게 작동시킬 수 있습니까? –
'gollum'에 'daemon'모드로 실행하는 옵션이 없다면'(gollum -p0 2> & 1 &) | sed ... | xargs ... '를 사용해야한다고 가정합니다. '(...) '의 서브 쉘은'gollum'이 죽을 때까지 기다리지 않습니다. 당신은 여전히'sed'로 죽지 않는 문제가있을 수 있습니다. 어쩌면'sed -n -e '/ port =/{s /.* port = //; p; q;}''를 사용하여 첫 번째 포트 라인 다음에서 멈출 수 있습니다. 두 가지 하위 팀이 필요하다고 생각합니다. 죽을 때 '골룸'을 실행하는 과정과 죽을 출력을 분석하는 'sed'가 필요합니다. –