Для упражнения с терминами я должен написать программу, которая будет отображать список элементов и позволять пользователю выбирать некоторые из них. Затем программа выведет выбранные элементы, разделенные пробелом. Программу можно назвать так:
$> ./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 для пользователя при вызове, как во втором случае?
РЕДАКТИРОВАТЬ: единственный вариант, который я нашел, - это вывести все на стандартный вывод и вывести выбранные элементы на стандартный вывод...
$(...)
). По крайней мере, он, вероятно, меняет свои действия в зависимости от того, является ли его стандартный вывод терминалом или нет. Поскольку в упражнении речь идет об использовании дисплея терминала, вам, возможно, придется проявить изобретательность. Возможно, вам следует организовать использование/dev/tty
для операций ввода-вывода с пользователем, оставив stdout строго для неинтерактивных вещей. Но требуемый дизайн... неоптимальный, нестандартный, противный. Напомни мне не использовать программу. (О, если подумать, вам не придется напоминать мне...) - person Jonathan Leffler   schedule 22.11.2012