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

时间:2018-03-04 03:25:48

标签: bash named-pipes

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

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':不是有效的标识符

任何人都知道为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

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

-video

答案 1 :(得分: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(或者再次使用,也许您不会)。