Я просто запускаю работу (предположим, foo.sh).
./foo.sh
[Press Ctrl-Z to stop]
bg # enter background
И это генерирует вывод в stdout и stderr. Есть ли способ перенаправить на stdout и stderr в другой файл вместо текущего экрана?
Видимо, я неправильно понял ваш вопрос в первый раз, поэтому вот мой обновленный ответ:
После того, как вы отправили свою программу в фоновый режим, вы сначала должны найти ее PID
pgrep foo.sh
Тогда вы можете использовать gdb для подключения к этому процессу
gdb -p <PID>
Затем в gdb вы меняете, куда записывает программа
p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)
тогда вы отсоединяетесь от процесса и выходите из gdb
detach
quit
Небольшое объяснение
577 эквивалентно O_CREAT|O_WRONLY|O_TRUNC420 эквивалентно S_IRUSR|S_IWUSR|S_IRGRP|S_IROTHopen открывает файл и усекает его до 0 байтов, если он существует, или создает новый с правильными правами доступа к файлам, если он не существуетdup2 дублирует дескриптор файла, возвращаемый вызовом open для дескриптора файла 1 (который является stdout)dup2 дублирует дескриптор файла от 1 до 2 (который является stderr)