태그 보관물: bash-scripting

bash-scripting

두 개의 자식 프로세스를 연속적으로 만드는 데 어떤 명령을 사용해야합니까? 기다립니다. 나는 이것을 달성하는 데

두 개의 자식 프로세스를 생성하고 싶지만 두 번째 자식 프로세스를 생성하기 전에 첫 번째 실행 프로세스 (stdout을 검사하여 결정할 수 있음)의 특정 지점에 도달 할 때까지 기다립니다. 나는 이것을 달성하는 데 어떤 유닉스 명령이 포함 될지 확신하지 못하고 유닉스 명령 이름의 간결하고 때로는 비밀스런 성격으로 인해 Google을 통해 무엇이든 찾는 데 어려움을 겪었습니다.

나는 해결하려는 특정 문제에 대한 해결책을 찾고 있지 않습니다 (추가 포인터가 감사 할지라도), 나는 주로 어떤 유닉스 명령을 찾고 사용하고 싶어하는지 알고 싶습니다.



답변

xargs이 유틸리티를 사용할 수 있습니다 . stdin에서 각 줄에 대해 명령을 실행할 수 있으므로 명령을 xargs시작할 때 stdin에서 단일 줄을 입력으로 가져와야합니다 grep.

proc1 | grep --max-count=1 "${targetString}" | xargs --max-lines=1 --no-run-if-empty --replace -- proc2

인수는 --max-count=1, --max-lines=1그리고 --no-run-if-empty그 확인 proc2을 시작 정확히 경우 언제 한 번 proc1출력 ${targetString}처음으로, 결코 경우 proc1결코 출력 ${targetString}. 이를 --replacexargs하면 입력 행이 해당 명령 행에 추가됩니다.

다음 명령 줄을 사용하여 테스트했습니다.

(echo Start >&2; sleep 3 ; echo Trigger; sleep 3; echo End >&2) | grep --max-count=1 Trigger | xargs --max-lines=1 --no-run-if-empty --replace -- echo "Triggered"


답변

나는 당신이 묻는 질문에 대한 우아한 명령 / 답변이 있는지 확실하지 않습니다 (즉, 실행 중 특정 지점에 도달). 그러나 솔루션을 개발하는 데 사용할 수있는 도구 / 기술이 있습니다. 다음, 그리고 내가 아직 모르는 다른 것들 :

  1. 백그라운드 프로세스 (&)
  2. 조건부 실행 (&& 및 ||)
  3. 자다
  4. 대기 (이것이 특히 유용 할 것으로 기대합니다-백그라운드에서 둘 이상의 작업을 시작하면 모든 작업이 완료 될 때까지 기다립니다)
  5. 명명 된 파이프 (프로세스 간 대화 메커니즘을 제공 할 수 있음)
  6. inodenotifywait

잠금 파일을 작성하고 확인하는 것도 일반적인 관행입니다 (프로 팁-환경을 제어 할 경우 / tmp가 아닌 램 디스크에 쓰기-많은 배포판에서 / dev / shm입니다).


답변

이것은 단지 아이디어 일 뿐이지 만 첫 번째 프로세스가 grep으로 출력을 파이프하도록합니다. grep 파이프의 출력을 읽기 라인 루프로 파이프하고 각 라인을 원하는 내용과 비교하십시오. 발견되면 proc2를 실행하십시오.

#!/bin/bash
targetString="line you are looking for"
proc1 | grep "${targetString}" |
while read line
do
if [ "$line" = "${targetString}" ]; then
    proc2
fi
done


“실행의 특정 지점”을로 결정할 수 있다면 stdout다음은 어떻습니까?

proc1 | grep "stdout trigger string" && proc2

&&때 발생한다 grep반환 0이 일치하는 항목을 발견 한 경우에만 수행한다.


답변