Ошибка перенаправления вывода программы в файл

Вы можете сохранить загрузчик для каждой ОС на соответствующих дисках и использовать BIOS для выбора диска для загрузки. На каждом компьютере, который я когда-либо видел, есть клавиша, которую вы можете нажать во время экрана BOIS POST, чтобы перейти в меню того устройства, с которого вы хотите загрузиться. Иногда нужно сначала включить его в BIOS. Обычно клавиша F8 на настольных компьютерах, но я также видел, что это F12, F2 или ESC, это зависит от вашей материнской платы (некоторые говорят вам, какая клавиша находится на экране POST).

Этот метод имеет то преимущество, что вы можете сколько угодно путаться с одним дистрибутивом без риска поломки загрузчика другого. Он также позволяет стирать, заменять, удалять или добавлять диски, не беспокоясь о нарушении работы других дистрибутивов. Кроме того, вы можете переустановить окна, не стирая / не ломая дистрибутивы Linux (хотя вам может потребоваться сначала отключить диски).

Поскольку все диски автономны, вы также можете делать некоторые интересные вещи, например, загружать другие диски, как в виртуальной машине, но при этом сохранять возможность физической загрузки.

3
04.10.2016, 22:15
3 ответа

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

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

cat > someFile.txt

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

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

/bin/nonexistent > zzz
5
27.01.2020, 21:13

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

СИНОПСИС

 #include  
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

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

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

2
27.01.2020, 21:13

У меня была такая же проблема. Журнал моей программы был записан не в [stdout], как ожидалось, а в [stderr]. Таким образом, перенаправление как [stdout], так и [stderr] было решением :

.
foo >> someFile.txt 2>&1
1
05.04.2020, 08:55

Теги

Похожие вопросы