Я пишу приложение на C++ и мне нужно работать с подстановкой процессов в оболочке Bash.

Я пытаюсь найти способ проверки путей, передаваемых в качестве аргументов моей программе, некоторые из которых указывают на файлы FIFO, созданные путем подстановки процессов.

Есть ли способ оболочки (или C++), чтобы я мог проверить, создает ли система эти файлы в /dev/fd или они созданы где-то еще?

2 ответа2

0

Короткий ответ: вы не можете этого сделать. То, что в каталоге по умолчанию bash указываются пути fifo, не означает, что конкретное fifo в этом каталоге было создано bash или что оно было передано bash в качестве аргумента вашей команде.

Посмотрите на общую картину вашей проблемы. Что вы ДЕЙСТВИТЕЛЬНО пытаетесь решить?

Если вы пытаетесь решить, «вывод моей программы должен всегда передаваться в другую программу», тогда не требуйте от пользователя использовать скрытую подстановку процесса в bash. Что, если оболочкой по умолчанию в их системе является zsh? Оболочка Борна? Корн скорлупа?

Вместо этого попросите вашу программу создать pipe, fork и выполнить другую программу.

Итак, что вы действительно пытаетесь сделать? Что произойдет, если вы, не дай Бог, запишите свой вывод в файл, который передал пользователь вашей программы, а не в fifo, созданный bash?

0

Используйте параметр -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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .