假设我有这个:
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
调用被缩短,或者您想要多个匹配项,请删除 的选项-m1
,grep
但请注意引号可能不适用于您的release_lock
代码(并且要小心删除这些引号,您不希望允许流氓角色!)。