Это было окончательным ответом, который был долго обсужден в комментариях для ответа terdons.
cd new
for i in */*/*.new; do cp "$i" "path/to/old/${i}" && rm "path/to/old/${i//new/old}"; done
Вот решение, вдохновленное ответом Soubunmei:
#!/bin/sh
ActiveWindowManagerPID()
{
local windowManager="$1"
local windowManagerPIDs="$(pidof "$windowManager")"
local displayNumber="$(echo $DISPLAY \
| awk 'BEGIN { FS = "[:.]" } { print $2 }')"
ps e -p "$windowManagerPIDs" \
| awk -v n="$displayNumber" \
'$0 ~ " DISPLAY=:" n "[\n .]" { print $1 }'
}
kill "$(ActiveWindowManagerPID blackbox)"
Раствор представляет собой
grep -E '^([a-z][A-Z])+$'
-121--118780- PS E
перечислены процессы с их командной строкой вместе с (начальными?) Переменными среды. Процессы фильтра Соответствующие либо -DISPLAY: 0
CommandLine или дисплей =: 0
Окружающая среда. Я считаю, что это найдет вопрос WM в вопросе, независимо от того, запущен ли вручную или по некоторым сценариям сеанса. Тогда мы можем просто Убить
.
Я слышу, что есть разные реализации PS, приведенные выше (BSD?) Стиль командлайн работает на моей машине с Debian Procps-NG. Обратитесь к руководству при необходимости.
На основании наблюдения WM является владельцем корневого окна , эта страница Arch Wiki имеет минимурцию с подходом XPROP -ROOT _NET_WM_PID
Найдите PID. Но это не работает для меня, казалось бы, потому что это только добровольно для X Windows, чтобы обеспечить это свойство, и мой WM случается, чтобы не следовать этой моде.
Что касается других идей неуместных, xkill может отсоединять клиентов , кроме корневого окна, поэтому не заполняйте нашу необходимость здесь.
Если вы определили tty, с которого вы запустили черный ящик, ps -t tty1
перечислит процессы, запущенные с этого терминала (предполагается, что tty1 - это тот, с которого вы запустили openbox, который хотите убить. ), то вы можете идентифицировать и убить того, кого хотите.