LINUX.ORG.RU

Исполнение команды в контексте другого терминала


0

3

Хочется запустить команду в одном терминале(или любой другой строке) так чтобы она воспринималась как запущенная на целевом. Нечто подобное делает dmenu, то есть позволяет запускать консольные приложения(хотя и ни без багов), хочется подобного универсально для целевого терминала.

К тому же желательно чтобы решение было достаточно универсально, работало под tmux и тп.

★★★★★

Не уверен, но попробуй так: запусти прогу на первом терминале, потом останови ее с помощью Ctrl+z , потом на втором терминале выполни fg .

Kroz ★★★★★
()
Ответ на: комментарий от Slavaz

При чем тут screen когда мне надо исполнять в том числе однострочники в tmux? Нужен неинтерактивный способ.

e7z0x1 ★★★★★
() автор топика
Ответ на: комментарий от Kroz

Не выйдет если запускается через какой-нибудь gmrun или программа сразу возвращает управление. К тому же тогда будет контекст другого терминала. Я знаю ка туда строки перенаправлять, хорошо бы отправлять туда программы (:

e7z0x1 ★★★★★
() автор топика

Написать обертку, которая будет постоянно функционировать на «целевом» терминале и читать данные из какого-нибудь потока, потом прочитанное выполнять. Соответственно с других терминалов писать в этот поток.

alozovskoy ★★★★★
()
Ответ на: комментарий от e7z0x1

Не выйдет если запускается через какой-нибудь gmrun или программа сразу возвращает управление.

Тогда можно с помощью kill послать SIGSTOP - это то же самое, что и Ctrl+Z. Попробуй.

Я знаю ка туда строки перенаправлять, хорошо бы отправлять туда программы (:

Хм. А как ты это делаешь? Что-то типа echo «Bla-bla-bla»> /dev/tty2 ? А если попробовать точно так же перенаправить stdin и stderr?
$ program > /dev/tty2 2>&1
?

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Да, тока не tty, а pts/[0-9], конечно.

Есть ещё идея с подключением по ssh к самому себе, только я никогда не пробовал это делать на практике, не очень понятно будет ли это прозрачно для юзера и возможно ли вообще; оно с цветами-то по умолчанию не всегда работает что уж говорить о esc-последовательностях, ориентированных на эмулятор(urxvt). То есть сделать алиас или что-то типа того а потом запускать по аналогии с sudo

Нормально всё передаст, кстати. Тока контекст оно не поменяет, оно просто данные все отдаст и всё.

Тогда можно с помощью kill послать SIGSTOP - это то же самое, что и Ctrl+Z. Попробуй.

Это я понял с самого начала, но это по сути мне ничего не дает, потому что придется вручную поднимать задачу. Можно сделать чтобы по хуку как-то сам восстанавливал, но это не решение, потому что я часто пользуюсь ^Z bg ^M когда забываю поставить &

Или я таки не понял.

Написать обертку, которая будет постоянно функционировать на «целевом» терминале и читать данные из какого-нибудь потока, потом прочитанное выполнять. Соответственно с других терминалов писать в этот поток.

Вроде бы это похоже на то что я думал с сокетами, именованными каналами или ssh, всё примерно одно к одному, надо пробовать.

Ещё предложения?

e7z0x1 ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Ну я не стал потому что решил не всё и не так, просто подумал что нет уже смысла чего-то ждать.

Да я вообще думаю давно бы всем поделиться. Оно пока больно кривое, к тому же почему-то иногда не срабатывает(я не понял правда это особенность скрипта или pickyfont) вообще хотел всё разом выложить вместе с новым скриншотом после того как создам нормальную репу на github'е.

Если интересно, то там основная идея в том чтобы динамически мержить ~/.Xresources, пример как это делать есть в font-size(/usr/lib/urxvt/perl), а вот как сделать чтобы было внешней командой без хоткея я пока не придумал. Суть в том что сейчас он читает команду из файла и дописывает её в ресурсы, потом парсит и исполняет, довольно криво.

В доках urxvt подходящего события к сожалению не нашел. Вот если бы он мог выполнять перловый код без перезапуска, тогда да, это бы всё решило.

По сути-то получилось что это не имеет смысла, потому что задумывалось как враппер для pickyfont чтобы прикрутить его к herbstluftwm(wm, на который я хочу перейти как его допилят и пишу к нему конфиги в свободное время), можно конечно скрипт повесить потому что hc-wm работает через ipc, но это не то что я задумал.

В общем там реально через жопу, даже запуск exec обычным вычитыванием из файла без запихивания в ресурсы почему-то нефига не работает.

e7z0x1 ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Перемудрил. Для неинтерактивного:

[~] >> tmux -S /tmp/tmux-1000/default  split-window 'exec pickyfont pro3'
(можно без указания сессии) Для интерактивного то же самое, тока наверно с объединением типа join-pane по вкусу. Простой run не работает ясен барабан.

e7z0x1 ★★★★★
() автор топика
Ответ на: комментарий от silw

Вроде нет, потому что она передает как я понял запущенную программу запущенную программу. А какой-нибудь tree в фоновом режиме это не запущенная программа)

Вообще как раз то что я хотел делается tmux'ом.

e7z0x1 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.