我正在编写一个 C++ 应用程序,需要在 Bash shell 中使用进程替换。
我正在尝试找到一种方法来验证作为参数传递给我的程序的路径,其中一些路径指向由进程替换创建的 FIFO 文件。
是否有一种 shell(或 C++)方法可以帮助我检查系统是否创建了这些文件/dev/fd
或者是否在其他地方创建了这些文件?
答案1
简短的回答是你不能这样做。仅仅因为目录是 bash 默认放置 fifo 路径的地方,并不意味着该目录中的特定 fifo 是由 bash 创建的,也不意味着它是 bash 作为参数传递给你的命令的。
从整体上看问题。你真正想要解决的是什么?
如果您试图解决“我的程序的输出必须始终通过管道传输到另一个程序”的问题,那么就不要要求用户使用 bash 晦涩难懂的进程替换。如果他们系统上的默认 shell 是 zsh,该怎么办?Bourne shell?Korn shell?
相反,让你的程序创建一个管道、分叉并执行另一个程序。
那么,你到底想做什么?如果你将输出写入程序用户传递的文件中,而不是写入 bash 创建的 fifo,会发生什么?
答案2
如果文件是管道,请使用以下-p
选项:test
#!/bin/bash
file="$1"
if [ -p "$file" ]
then
echo "$file is a pipe"
fi
演示:
$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe