我有这个:
delete_lock(){
first_arg=$1
}
node x.js | delete_lock $0 < ${my_named_pipe} &
我希望从 my_named_pipe 读取到 Node.js 进程的标准输入,并根据某些输入,写入到 Node.js 进程中的标准输出,然后由 delete_lock 捕获。
我的主要问题是,如何在bash中的delete_lock中引用stdin?我不认为它是 0 美元,我该怎么办?
这是唯一的方法吗?
node x.js | { while read line; delete_lock $line; } < ${my_named_pipe} &
答案1
您说您需要 Node 应用程序从管道中读取数据,那么我们就这样做:
node x.js <"$my_named_pipe"
然后你说你希望函数读取它的输出,那么我们也这样做:
node x.js <"$my_named_pipe" | delete_lock
请注意,这|
是一个命令终止符,这意味着在
command1 | command2 <thing
它是command2
从 读取的thing
。
回复评论:
该delete_lock
函数可以读取来自 Node 应用程序的标准输入。例如,如果它必须根据 Node 应用程序的输出中的模式执行某些操作,则它可能需要使用grep
:
delete_lock () {
if grep -q 'PATTERN'; then
# some command here
fi
}
如果您需要 Node 应用程序在函数执行操作后继续运行,那么您需要继续使用其输出:
delete_lock () {
if grep -q 'PATTERN'; then
# some command here
fi
cat >/dev/null
}
否则,Node 应用程序将收到 SIGPIPE 信号并终止。