Написать команду в одном терминале, увидеть результат на другом

35

Я хочу запустить команду foo на одном терминале и передать результат на другой терминал. Можно ли это сделать ?

Мохаммед Реза Резвани
источник
4
Также посмотрите на tmux и screen , которые позволяют вам перенять, отразить или просто выполнить команды на других сессиях.
Кевин

Ответы:

46

Да, это. Картинка стоит тысячи слов:

терминал Раду

Таким образом, вы должны перенаправить вывод вашей команды, используя >оператор /dev/pts/#. Вы можете найти #с помощью whoили wкоманды. Если вы хотите перенаправить и ошибки, используйте:

<command> >& /dev/pts/#
Раду Рэдяну
источник
Спасибо. но если другой терминал не существует. что мы должны делать? Или лучше сказать, передать его новому?
Мохаммед Реза Резвани
5
Вероятно, вам понадобится скрипт для этого: скрипт примет в качестве аргумента вашу команду, затем должен открыть новый gnome-terminalи определить tty (используя ttyкоманду) нового терминала и, наконец, отправить вывод на него.
Раду Рэдяну
8

Как то так для вашего $HOME/.bashrc:

ng() { gnome-terminal -x sh -c "$*; bash"; }

Это запустит команду и покажет результат в новом окне терминала.

Примеры:

ng ls -l
ng echo foo

Изменить: чтобы рассмотреть псевдонимы от $HOME/.bashrcиспользования этого вместо:

ng() { gnome-terminal -x bash -ic "$*; bash"; }

то выход lsдолжен быть окрашен (благодаря Radu Rădeanu для этого намека ).

TuKsn
источник
Это запустит команду прямо в новом терминале.
Раду Рэдяну
Да, но в чем преимущество того, чтобы запустить его сначала в старом терминале?
TuKsn
Нет преимущества ..., но на самом деле это ответ на этот комментарий .
Раду Рэдяну
4
Вы поймете, если type lsng type ls
побежите,
1
если записать функцию в одну строку в bashrc, возможно, потребуется точка с запятой, чтобы завершить ее, или вы встретите ошибку «неожиданный конец файла». так ng() { gnome-terminal -x sh -c "$*; bash" ;}должно быть лучше. И если вы используете xfce (xfce4-терминал в качестве эмулятора по умолчанию): ng() { xfce4-terminal -x sh -c "$*; bash" ;}или вы можете просто запустить любой эмулятор по умолчаниюng() { x-terminal-emulator -x sh -c "$*; bash";}