Я пробовал такие вещи, как rse чтобы отличать потоки стандартного вывода и стандартных ошибок от программы; но мне бы очень хотелось, чтобы вариант просматривал их в отдельных терминалах, не перенаправляя в файл и не отслеживая его или что-то в этом роде (предположим, что любой из потоков может печатать коды управления терминалами ANSI.)

Есть ли способ открыть стандартную ошибку существующего процесса в новом терминале или что-то в этом роде?

2 ответа2

2

Откройте два терминала. Во втором, выясните его устройство tty, запустив команду tty . Будет напечатано что-то вроде /dev/pts/8 .

Во-первых, запустите ваше приложение, перенаправив сюда его stderr, например, myapp 2>/dev/pts/8 .

Я использую это так часто для отладки, что задаю заголовок терминала, содержащий номер tty, поэтому мне даже не нужно запускать команду tty . Я делаю это в приглашении оболочки, комбинируя escape-последовательность, которая изменяет заголовок с \l bash (это строчная буква L) для номера строки tty, т.е. PS1=$'\\[\e]0;\l\a\\] ...'

Я часто запускаю cat во втором терминале перед запуском реального приложения, на случай, если я случайно наберу что-то там, что это безвредно, и чтобы курсор переместился на первый столбец. Это не обязательно, хотя.

1

Моим первым инстинктом было "нет", но потом я придумал это уродство:

sh -c 'echo stdout; echo stderr >&2' 2> >(
    errs=$(cat)
    xterm -e "bash -c '
        cat <<\"END\"
$errs
END
        read -p DONE
    '"
)

Стандартная ошибка перенаправляется на подстановку процесса, где содержимое собирается и затем передается в сценарий, выполняемый в xterm.

Я горжусь тем, что придумал это, но в основном смущен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .