Может ли команда «tee» в linux распечатать как ввод, так и вывод программы C? - PullRequest
1 голос
/ 21 июня 2020

У меня есть простая C программа, в которой она попросит пользователя принять целое число, а затем напечатает это целое число.

#include <stdio.h>
int main() {   
    int number;
    printf("Enter an integer: ");  
    scanf("%d", &number);
    printf("You entered: %d", number);  
    return 0;}

Когда я использую эту команду:

gcc program.c -o test
./test | tee text.txt

Программа, запущенная на терминале, не печатает строку ввода целого числа, а вместо этого ожидает ввода, и когда я предоставляю этот ввод, она печатает его, а также в папку text.txt. Я хочу запустить программу как есть и сохранить все, что запущено на терминале, в папку text.txt, включая входные и выходные данные. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

Команда tee работает с одним входом, но вы хотите захватить два. С некоторой осторожностью вы можете использовать две отдельные команды tee, две из которых копируют входные и выходные данные в один и тот же файл, но вам лучше использовать утилиту, разработанную для ваших целей, такую ​​как script .

0 голосов
/ 21 июня 2020

Для Linux на базе Debian запустите apt install devscripts, а затем попробуйте annotate-output util. Например, запустите cat, используя подстановку процесса и файл, которого вообще нет:

annotate-output cat <(echo hello) /bin/nosuchfile

... который показывает, что в противном случае было бы вводом, выводом и стандартным выводом ошибок, все отправлено в стандартный вывод, который затем может быть передан в файл:

13:01:03 I: Started cat /dev/fd/63 /bin/nosuchfile
13:01:03 O: hello
13:01:03 E: cat: /bin/nosuchfile: No such file or directory
13:01:03 I: Finished with exitcode 1
...