我有以下调用来创建命名管道:
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':不是有效的标识符
任何人都知道为什么这不起作用?
答案 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
(或者再次使用,也许您不会)。