Как работать, команда в экранируют таким образом, что можно возвратиться к родительской оболочке команды?

Просто используйте приложение ярлыка для создания ярлыков для этого сценария..

Вызовы в качестве примера: script_name left ... script_name right

Лучший documentaton/examples я нашел для wmctrl в Spiral Надежды

Для xprop, страница справочника имеет несколько основных примеров, но я ничего не нашел для нее с таким же количеством детали как страница Spiral of Hope...

#!/bin/bash
# $1 ... top | bottom | left | right
#
unset x y w h a
eval $(xprop -root |sed -rne 's/^_NET_WORKAREA\(CARDINAL\) = ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)$/x=\1;y=\2;w=\3;h=\4/p' \
                          -e 's/^_NET_ACTIVE_WINDOW\(WINDOW\): window id # (0x.*)$/a=\1/p')
[[ -z "$a" ]] && exit 1                            
case "$1" in
  top    ) ((h=h/2));;
  bottom ) ((y=y+(h-(h/2))));((h=h/2));;
  left   ) ((w=w/2));;
  right  ) ((x=x+(w-(w/2))));((w=w/2));;
esac
wmctrl -i -r "$a" -e 0,$x,$y,$w,$h
#

3
21.10.2010, 01:53
3 ответа

После того, как я задал этот вопрос, я принял другое, но гораздо более эффективное решение: использовать tmux.

Запустите новую именованную, отделенную сессию:

$ tmux new -d -s top

Отправьте команду в ее нулевое окно.

$ tmux send-keys -t top:0 "top" C-m

C-m эквивалентно нажатию клавиши return. Часто это то, что вам нужно; иногда вы захотите оставить это без внимания.

Набор команд tmux хорошо документирован. Поэтому легко написать гораздо более сложные скрипты для управления им.


Обычно это был бы крайне неприятный ответ, но поскольку это мой вопрос, я позволю себе некоторую свободу действий, тем более что я так и не смог добиться надежной работы ни одного из других методов. В отличие от них, я смог правильно написать сценарий tmux при первой же попытке.

0
27.01.2020, 21:11

Создайте a ~/.screenrc.top как так:

screen
stuff "top\015"

Теперь выполненный screen -c ~/.screenrc.top. Никакое состояние состязания!

7
27.01.2020, 21:11

Вот несовершенное решение, которое я нашел.

screen -e'^\\\' -dmS top-in-screen

Затем можно работать:

screen -S top-in-screen -p 0 -X stuff 'top^M'

(Обратите внимание на это, хотя Вы будете только видеть ^M необходимо на самом деле ввести C-v сопровождаемый сразу C-m.)

Это несовершенно, потому что (я думаю) существует состояние состязания между первыми и вторыми вызовами экрана.

Из http://aperiodic.net/screen/faq#how_to_send_a_command_to_a_window_in_a_running_screen_session_from_the_commandline, который имеет большую другую хорошую информацию также.

1
27.01.2020, 21:11

Теги

Похожие вопросы