引用从管道发送进程发送的标准输入

引用从管道发送进程发送的标准输入

假设我有这个:

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

node foo.js | delete_lock

假设node.js进程将“foodog”写入delete_lock,或者发送“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代码(并且要小心删除这些引号,您不希望允许流氓角色!)。

相关内容