【问题标题】:Process Substitution to named pipe conversion进程替换到命名管道转换
【发布时间】:2021-04-21 04:58:59
【问题描述】:

我是 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

请帮我找到解决办法。

【问题讨论】:

    标签: shell sh busybox


    【解决方案1】:

    &lt;(...) 是一个 Bash 主义,Busybox 只支持普通的 sh 语法。一种与 sh 兼容的方法是在花括号内运行 echocat,然后将生成的 compound command 通过管道传输到您的工具。

    { echo 0 0 1 /config/camConfig.txt 0 3840 2160 8 0 0; cat; } | ~/tools/camera/stream
    

    我什至会在 Bash 中这样做,因为它更直接,因此更有效地表达了你正在尝试做的事情。


    不管怎样,我认为如果您从最后一行中删除 &lt; 重定向,您的解决方案会起作用。

    cat ~/config/settings.txt - | ~/tools/camera/stream
    

    为什么不使用&lt;?您正在尝试cat 管道和标准输入。如果你使用&lt; 会导致settings.txt 被重定向到stdin,这与- 冲突并且意味着stdin 不再连接到键盘。

    另外,我可能会将管道插入/run,它适用于ephemeral runtime files——非常适合管道。 (或者,/var/run/tmp。)我会给它一个 .fifo 扩展名,以表明它不是一个常规文件。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多