
Estoy escribiendo una aplicación C++ y necesito trabajar con la sustitución de procesos en el shell Bash.
Estoy tratando de encontrar una manera de validar las rutas pasadas como argumentos para mi programa, algunas de las cuales apuntan a archivos FIFO creados mediante sustitución de procesos.
¿Existe alguna forma de Shell (o C++) para poder comprobar si el sistema crea estos archivos /dev/fd
o si se crean en otro lugar?
Respuesta1
La respuesta corta es que no puedes hacer esto. El hecho de que un directorio sea el lugar donde bash coloca de forma predeterminada las rutas quince, no significa que bash haya creado un quince en particular en ese directorio, o que bash lo haya pasado como argumento para su comando.
Eche un vistazo al panorama más amplio de su problema. ¿Qué estás REALMENTE tratando de resolver?
Si está intentando resolver "la salida de mi programa siempre debe canalizarse a otro programa", entonces no requiera que el usuario utilice la oscura sustitución de procesos de bash. ¿Qué pasa si el shell predeterminado en su sistema es zsh? ¿Concha Bourne? ¿Cáscara de maíz?
En su lugar, haga que su programa cree una tubería, una bifurcación y ejecute el otro programa.
Entonces, ¿qué estás intentando hacer realmente? ¿Qué sucede si usted, Dios no lo quiera, escribe su salida en un archivo que pasó el usuario de su programa, en lugar de en un quince creado por bash?
Respuesta2
Utilice la -p
opción test
si un archivo es una tubería:
#!/bin/bash
file="$1"
if [ -p "$file" ]
then
echo "$file is a pipe"
fi
Manifestación:
$ myscript.sh <(echo hello)
/dev/fd/63 is a pipe