パイプ転送プロセスで送信された標準入力への参照

パイプ転送プロセスで送信された標準入力への参照

私がこれを持っているとしましょう:

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呼び出しを短くしたくない場合や複数の一致が必要な場合は、オプションを削除してください-m1grepただし、引用符がrelease_lockコードに適用されない可能性があることに注意してください(そしてこれらの引用符を削除するときは注意してください。悪い俳優!)。

関連情報