파이프 전송 프로세스에서 전송된 표준 입력에 대한 참조

파이프 전송 프로세스에서 전송된 표준 입력에 대한 참조

내가 이것을 가지고 있다고 가정 해 봅시다 :

delete_lock () {
    if grep -q 'PATTERN'; then
        # some command here
    fi
    cat >/dev/null
}

node foo.js | delete_lock

node.js 프로세스가 delete_lock에 "foodog"를 쓰거나 "sandbag"를 보낸다고 가정합니다. (고유한 이름이어도 됩니다...)

delete_lock 함수에서 어떻게 읽을 수 있나요? delete_lock은 고유한 이름을 받은 다음 파일 시스템에서 해당 이름의 잠금을 삭제합니다. 어떻게 해야 합니까?

내가 추측할 수 있는 유일한 것은:

  delete_lock () {
        if grep -q 'lockname:xxx'; then
            release_lock $xxx
        fi
        cat >/dev/null
  }

그런데 변수 $xxx를 어떻게 참조하나요? 하하?

답변1

나는 당신이 xxx일종의 패턴 교체라고 가정합니다.

delete_lock () {
    LOCK="$(grep -m1 -o "lockname:xxx")"
    if [ -n "${LOCK#lockname:}" ]; then
        release_lock "${LOCK#lockname:}"
    fi
}

node foo.js | delete_lock

첫 번째 일치 항목이 관찰되면 데이터 처리가 중지됩니다 lockname:xxx. 그런 다음 사용합니다.매개변수 확장접두사를 제거 lockname:하고 일치하는 항목이 있다고 가정하여(예: ) xxx이를 실행합니다 release_lock(예: release_lock "xxx").

node호출이 단축되는 것을 원하지 않거나 여러 일치 항목을 원하는 경우 옵션을 제거하십시오 -m1. grep그러나 따옴표가 release_lock코드에 적용되지 않을 수 있다는 점에 유의하십시오(그리고 이러한 따옴표를 제거할 때 주의하십시오. 불량 배우들!).

관련 정보