如何解决过程替换到命名管道转换
我是 Busybox 的新手,我发现进程替换在 Busybox 中不起作用。谁能帮我在 Busybox 中使用命名管道模拟以下命令。
cat <(echo 0 0 1 /config/camConfig.txt 0 3840 2160 8 0 0) - | ~/tools/camera/stream
我正在开发一款在 Busybox 上运行的相机。为了流式传输相机进行分析,我需要启动一个应用程序/tools/camera/stream,但每次运行此应用程序时,我都需要手动向应用程序插入相同的信息集,然后它将开始流,分析完成后,我需要在应用程序中输入数字 13 来停止相机。所以我想自动化这个任务,我尝试了上面的命令。后来我发现我不能这样做。我尝试了下面的命令,但只有第一个输入 0 被传递给应用程序。
[ -p ~/config/settings.txt ] || mkfifo ~/config/settings.txt
echo 0 0 1 /config/camConfig.txt 0 3840 2160 8 0 0 > ~/config/settings.txt &
cat <~/config/settings.txt - | ~/tools/camera/stream
请帮助我找到解决方案。
解决方法
<(...)
是一种 Bash 主义,Busybox 只支持普通的 sh 语法。一种与 sh 兼容的方法是在大括号内运行 echo
和 cat
,并将结果 compound command 通过管道传输到您的工具。
{ echo 0 0 1 /config/camConfig.txt 0 3840 2160 8 0 0; cat; } | ~/tools/camera/stream
我什至会在 Bash 中这样做,因为它更直接,因此更有效地表达了您正在尝试做的事情。
就其价值而言,如果您从最后一行中删除 <
重定向,我认为您的解决方案会起作用。
cat ~/config/settings.txt - | ~/tools/camera/stream
为什么不使用 <
?您正在尝试 cat
管道和标准输入。如果您使用 <
会导致 settings.txt
被重定向到 stdin,这与 -
冲突并意味着 stdin 不再连接到键盘。
此外,我可能会将管道粘在 /run
中,这对于 ephemeral runtime files 来说是完美的选择。 (或者,/var/run
或 /tmp
。)我会给它一个 .fifo
扩展名以表明它不是一个常规文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。