命名管道的标识符无效......“不是有效的标识符”

问题描述 投票:0回答:2

我有以下调用来创建命名管道:

mkfifo "$HOME/.quicklock/ql_named_pipe";

然后我从命名管道中读取:

while read line; do ql_on_named_pipe_msg "$line" "$$"; done < "$HOME/.quicklock/ql_named_pipe" &

但我收到此错误消息:

./scripts/tsc.sh:line 23:read:`/Users/alexamil/.quicklock/ql_named_pipe':不是有效的标识符

有谁知道为什么那不应该工作?

bash named-pipes
2个回答
1
投票

如果您仔细阅读评论,原来的代码看起来像是:

my_named_pipe="$HOME/.quicklock/ql_named_pipe"

…

while read $my_named_pipe
do
    …
done < $my_named_pipe   # This redirection not 100% clearly stated

这确实会导致错误“无效标识符”。 read命令期望将变量名称作为参数。当给出$my_named_pipe时,它看到:

while read /Users/whoever/.quicklock/ql_named_pipe

而且绝对不是有效的变量名。

正如self-answer所提出的,一个最合理的选择是:

while read line
do
    …
done < $my_named_pipe

'大多数'是因为在POSIX read中有sh的问题 - 另见read的Bash手册。你可能更喜欢使用read -r(或者再次使用,也许你不会)。


1
投票

不确定是什么问题,但这应该工作正常:

my_named_pipe="/some/path/on/your/fs/ql_named_pipe"
while read line; do ql_on_named_pipe_msg "$line" "$$"; done < ${my_named_pipe} &
© www.soinside.com 2019 - 2024. All rights reserved.