Отобразить вывод программы, вызванной между обратными кавычками

Для упражнения с терминами я должен написать программу, которая будет отображать список элементов и позволять пользователю выбирать некоторые из них. Затем программа выведет выбранные элементы, разделенные пробелом. Программу можно назвать так:

$> ./my_program foo1 foo2 foo3

или вот так:

$> ls `my_program foo1 foo2 foo3`

Моя программа хорошо работает в первом случае, но во втором стандартный вывод my_program перехватывается обратными кавычками и не отображается на терминале. Я знаю, что программа работает хорошо, так как я получил ожидаемый результат от ls, если выберу некоторые элементы вслепую.

В моей программе я не могу использовать никакие встроенные функции, кроме следующих: • ioctl • tcsetattr • tcgetattr • tgetent • tgoto • tputs • tgetstr • tparm • open • close • write • malloc • free • read • exit • signal

Как я могу отобразить стандартный вывод my_program для пользователя при вызове, как во втором случае?

РЕДАКТИРОВАТЬ: единственный вариант, который я нашел, - это вывести все на стандартный вывод и вывести выбранные элементы на стандартный вывод...


person Quentin Hayot    schedule 22.11.2012    source источник
comment
Программа, использующая отображение терминала, не предназначена для использования в обратных кавычках (или, лучше, в нотации $(...)). По крайней мере, он, вероятно, меняет свои действия в зависимости от того, является ли его стандартный вывод терминалом или нет. Поскольку в упражнении речь идет об использовании дисплея терминала, вам, возможно, придется проявить изобретательность. Возможно, вам следует организовать использование /dev/tty для операций ввода-вывода с пользователем, оставив stdout строго для неинтерактивных вещей. Но требуемый дизайн... неоптимальный, нестандартный, противный. Напомни мне не использовать программу. (О, если подумать, вам не придется напоминать мне...)   -  person Jonathan Leffler    schedule 22.11.2012
comment
Запись в /dev/tty отлично работает! Спасибо ! Это просто для целей обучения, этот код не будет использоваться вне этой области;)   -  person Quentin Hayot    schedule 22.11.2012


Ответы (1)


Вы можете открыть и записать /dev/tty в my_program, и это будет только на терминал, а не на перенаправленный стандартный вывод.

person Diego Torres Milano    schedule 22.11.2012