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


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

Нет преимущества ..., но на самом деле это ответ на этот комментарий .
Раду Рэдяну

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";}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.