C-背部之间执行程序的术语



我正在尝试制作一个C程序以选择选项。如果我这样运行,它可以工作:

./select choice{1..5}
☐ choice1  ☐ choice3  ☐ choice5
☐ choice2  ☐ choice4
# outputs "choice1 choice2" on stdout

但是,如果我在背部之间运行它,那是地狱

`./select choice{1..5}` > choices.txt
☐ choice1☐ choice2☐ choice3☐ choice4☐ choice5
# Write "choice1 choice2" in `choices.txt`

我需要能够检索选定的选项。这就是为什么我将所有输出都完成给我打开的文件

int tty = open("/dev/tty", O_RDWR);
/* Do my program using outputs on fd `tty` */
printf("%sn", get_results());

我认为这与我的代码中的tgoto使用有关,以在屏幕上移动写作光标。

if ((cm = tgetstr("cm", NULL)) == NULL)
    return (-1);
tputs(tgoto(cm, x, y), fd, &my_putchar);
return (0);

我已经看到,使用isatty(1)在Backticks之间执行时返回0,而1如果直接执行...因此,我是否有办法移动光标并将我的配置保持在两种情况下?

谢谢您的时间

问题中所示的代码片段是使用 Termcap 接口(不是 curses (。它使用

tputs(tgoto(cm, x, y), fd, &my_putchar);

其中 my_putchar 可能会写入标准输出,例如程序的其余部分(使用 printf (。如果将程序更改为将其所有屏幕输出写入标准错误,那么最后,它可以将其 result 写入标准输出,简化脚本。p>无需打开 /dev/tty ;而是替换

printf("choice%d", n);

fprintf(stderr, "choice%d", n);

当然更改 my_putchar

之类的东西
int my_putchar(int c) { return fputc(c, stderr); }

是要走的方式。

如果这是 curses 应用程序,则将使用newterm而不是initscr更改输出流。对话框使用newterm,当然。

相关内容

  • 没有找到相关文章

最新更新