C программа застряла на терминале при перенаправлении вывода в другой файл из bash скрипта - PullRequest
2 голосов
/ 21 июня 2020

Я пытаюсь запустить программу C из файла bash в Linux, а затем записать ее вывод в другой файл (который находится в другом каталоге). Я использую следующую команду:

gcc myfile.c -o test 
./test > /home/"$user"/Documents/"$name"/"$file" 

Всякий раз, когда я пытаюсь запустить эту команду, программа не запускается, а застревает при загрузке. Даже если я напишу одно имя файла (из того же каталога, где находится программа), программа не запустится, пока я не удалю всю команду перенаправления и не напишу простую команду ./test. Я не знаю, почему это происходит.

Это программа C:

#include <stdio.h>

int main()
{
  int array[100], n, c, d, swap;
  printf("Enter number of elements\n");
  scanf("%d", &n);
  printf("Enter %d integers\n", n);
  for (c = 0; c < n; c++)
    scanf("%d", &array[c]);
  for (c = 0 ; c < n - 1; c++)
  {
    for (d = 0 ; d < n - c - 1; d++)
    {
      if (array[d] > array[d+1]) 
      {
        swap       = array[d];
        array[d]   = array[d+1];
        array[d+1] = swap;
      }
    }
  }

  printf("Sorted list in ascending order:\n");

  for (c = 0; c < n; c++)
     printf("%d\n", array[c]);
  return 0;
}

Даже если я пишу это так:

./test | tee text.txt

Ничего не печатается.

Ответы [ 2 ]

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

вы можете использовать команду tee для сбора информации о printw. нравится ./test | tee или вы пытаетесь добавить в него 2> & 1.

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

Моя проблема была решена с помощью команды script в Linux. Эта команда сохраняет и записывает как ввод, так и вывод, который был предоставлен во время выполнения программы C, в желаемый текстовый файл. Команды cat и tee не работают, если в программе C есть scanf.

...