Как открыть новый терминал, выполнить процесс в этом терминале и направить к процессу?
То, что я хотел бы сделать в основном, это версия нового окна 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)