Перенаправить вывод программы в файл не удается

Поэтому у меня есть программа, которая позволяет называть ее foo. Я пытаюсь перенаправить вывод терминала в файл, используя следующую команду.

foo > ./someFile.txt 

Теперь, когда я запускаю эту команду, создается файл someFile.txt, но он пуст. Любые предложения о том, как я могу перенаправить вывод терминала?

  • Перенаправление после запуска процесса
  • Почему выход не перенаправляется в файл?
  • Как определить, является ли вывод команды или сценария оболочки стандартным или stderr
  • Почему я могу добавить файл, но не перезаписать его?
  • Ограничить размер файла журнала
  • Захват вывода без перенаправления и оставьте его на терминале тоже
  • Как я могу захватить вывод экрана в именованный файл по команде по базам команд?
  • перенаправить в тот же файл, что и исходный файл, обработанный командой
  • является ли Linux перенаправлением «>>» медленнее с большими файлами?
  • Почему выход не перенаправляется в файл?
  • Захват вывода без перенаправления и оставьте его на терминале тоже
  • Как перенаправить вывод запущенной программы в / dev / null
  • 2 Solutions collect form web for “Перенаправить вывод программы в файл не удается”

    Ожидается поведение, что файл someFile.txt будет создан. Независимо от того, содержит ли этот файл что-либо, зависит от того, что должна делать ваша программа foo .

    Какая бы проблема вы ни сталкивались, похоже, не связана с перенаправлением вывода. Вы можете попробовать следующую команду в качестве теста:

     cat > someFile.txt 

    типа ничего. Все, что вы набрали, будет перенаправлено на someFile.txt (заканчивается ctrl + d ).

    Кстати, выходной файл создается вашей оболочкой, а не вашей программой foo . Даже если вы наберете несуществующую команду, выходной файл все равно будет создан (пустой):

     /bin/nonexistent > zzz 

    Другая возможность заключается в том, что foo использует isatty и ничего не пишет для stdout, если stdout не указывает где-то интерактивным.

    СИНТАКСИС

     #include <unistd.h> int isatty(int fd); 

    ОПИСАНИЕ Функция isatty () проверяет, является ли fd открытым файловым дескриптором, относящимся к терминалу.

    Эта короткая программа Python демонстрирует это:

     import sys, os if sys.stdout.isatty(): print "Hello, tty %s" % os.ttyname(1) else: print "stdout: not a typewriter: how boring" 

    Как и эта короткая программа C:

     #include <stdio.h> #include <unistd.h> int main (void) { if ( isatty(1) ) { printf("Hello, tty %s\n", ttyname(1)); } else { printf("stdout: not a typewriter: how boring\n"); } return 0; } 

    Обе программы имеют одинаковое поведение:

     $ ./isatty > notatty ; cat notatty stdout: not a typewriter: how boring $ ./isatty.py Hello, tty /dev/pts/1 $ ./isatty | cat stdout: not a typewriter: how boring 

    Программы могут выбирать, как и что они печатают, независимо от того, перенаправляются ли они.

    Общее применение этого заключается в том, чтобы избежать написания escape-последовательностей ANSI, считываемых терминалами ( \e[33;1m и т. Д.) Для раскраски текста в файлы, что выглядит уродливым и смущает парсеры.

    Linux и Unix - лучшая ОС в мире.