Используйте -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
Я пишу приложение на C ++ и мне нужно работать с подстановкой процессов в оболочке Bash.
Я пытаюсь найти способ проверки путей, передаваемых в качестве аргументов моей программе, некоторые из которых указывают на файлы FIFO, созданные путем подстановки процессов.
Есть ли способ оболочки (или C ++), чтобы я мог проверить, создает ли система эти файлы /dev/fd
или они созданы где-то еще?
Используйте -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
Короткий ответ: вы не можете этого сделать. То, что в каталоге по умолчанию bash указываются пути fifo, не означает, что конкретное fifo в этом каталоге было создано bash или что оно было передано bash в качестве аргумента вашей команде.
Посмотрите на общую картину вашей проблемы. Что вы ДЕЙСТВИТЕЛЬНО пытаетесь решить?
Если вы пытаетесь решить, «вывод моей программы должен всегда передаваться в другую программу», тогда не требуйте от пользователя использовать скрытую подстановку процесса в bash. Что, если оболочкой по умолчанию в их системе является zsh? Оболочка Борна? Корн скорлупа?
Вместо этого попросите вашу программу создать pipe, fork и выполнить другую программу.
Итак, что вы действительно пытаетесь сделать? Что произойдет, если вы, не дай Бог, запишите свой вывод в файл, который передал пользователь вашей программы, а не в fifo, созданный bash?