Как открыть новый терминал, выполнить процесс в этом терминале и направить к процессу?

То, что я хотел бы сделать в основном, это версия нового окна less, Давным-давно был инструмент под названием gless который сделал именно это. Например

cat my_very_long_file | gless

откроет новое окно и запустит less-пейджер, показывающий мою очень длинную папку; терминал, с которого я запускаю команду, останется чистым.

gless недоступно в более новых системах. Ближайшая альтернатива, которую я нашел, gview - (практически gvim в режиме "только чтение" (чтение стандартного ввода), но это не совсем так; он читает весь stdin перед отображением чего-либо, поэтому не подходит для больших вводов.

Я думал о запуске нового терминала (xterm, konsole или что-нибудь) с less в качестве начальной команды. Но это не работает так, как я хочу; Я хотел бы сделать что-то вроде

cat my_very_long_file | xterm -e less

Но xterm и все остальные терминалы, похоже, не передают свой стандартный ввод процессу, который они запускают - новое окно открывается, но сразу исчезает.

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

В качестве теста любого предложенного метода, пожалуйста, рассмотрите это как контрольный пример:

od -a /dev/random | <whatever-solution>

С замененным решением это должно создать новое окно с пейджером (или любой другой программой в этом отношении), который получает бесконечный случайный поток текста.

(Позднее дополнение) Я ищу простое решение, которое сохранит дух пейджера. Многошаговые решения могут работать, но неестественно. Существует также одна командная строка, которая также работает: xterm -e 'whatever | less'Я использую это иногда, но это неестественно для меня.

2 ответа

Как насчет именованной трубы?

mkfifo /tmp/test.fifo
od -a /dev/urandom > /tmp/test.fifo

И в новом окне:

cat /tmp/test.fifo | less

Или же:

gnome-terminal -e "bash -c 'cat /tmp/test.fifo | less'"

Попробуйте добавить эту функцию в ваш ~/.bashrc:

gless() { gnome-terminal -e "less $*" & }

Это запускает терминал в фоновом режиме, освобождая вашу консоль. Также он передает все аргументы команде less (например, gless -S test.txt)

Другие вопросы по тегам