У меня есть команда, которую я запускаю каждый раз, когда открывается новый терминал или производится новый вход в систему.
Эта программа производит вывод (цветной), который должен располагаться перед командной строкой. Запуск может занять несколько секунд, что не позволит мне использовать терминал до тех пор (если он не работает в фоновом режиме).
Учитывая, что у zsh есть несколько продвинутых способов перерисовки терминала без залипания существующего текста, я хотел бы знать, как я могу выполнить эту команду так, чтобы мне не приходилось ждать ее завершения, прежде чем я смогу использовать терминал, но это как только он заканчивает работу, он печатает вывод, как если бы он не был фоновым.
На практике я хотел бы что-то, что может сделать:
Command output:
... (running on background)
me@computer: somecommand
me@computer: someothercommand
и как только команда завершится, я получу:
Command output:
* Output foo
* Multiple lines bar
* and some yada
me@computer: somecommand
me@computer: someothercommand
Я попытался поместить процесс в фоновом режиме при запуске, но затем он не отображает вывод чисто. Я получаю что-то вроде:
Command output:
[2] 32207
me@computer: somecommand
me@computer: someother * Output foo
* Multiple lines bar
* and some yada
[2] + done command
me@computer: someothercommand
Так это возможно? Если нет с zsh, есть ли какое-нибудь решение, которое могло бы это сделать?
Любые указатели или информация приветствуются.
zpty
: запустить команду на терминале, созданном zsh, с выводом, передаваемым на реальный терминал под контролем zsh.zpty
? Я знаю, что вы не можете иметь две программы, пишущие на один и тот же терминал, без какой-либо конкуренции за курсор. Мой вопрос связан с тем, что zsh уже переписывает приглашение в некоторых конфигурациях. Очевидно, что этой программе придется записывать данные во временный буфер в памяти, который затем будет «напечатан» в определенном месте после завершения команды. Все последние под контролем зш.screen
помощью сценария запуска, который разделяет экран и запускает длинный бегун в верхней части и обычную командную строку в нижней части.Ответы:
Это простое решение, если вы готовы принять вывод чуть выше текущей строки приглашения.
Когда работа завершена, текущий быстрый и входной буфер будет удален и полнота данной команды
stdout
иstderr
будет распечатан.С этим модулем вы можете получить гораздо больше фантазии, чем с этим
zsh/curses
, но я сомневаюсь, что это даст преимущество, достаточно значительное, чтобы заслужить усилия.источник
[1] 27911 27912
в одной строке, так и в первой строке Терминал.