Опубликованное здесь решение не сработало для меня, но поскольку этот вопрос возник первым, когда я искал решение аналогичной проблемы, а также -t -t
трюк был упомянут здесь, я опубликую решение, которое сработало для меня, чтобы другие могли попробовать.
ssh -t -t -o ControlMaster=auto -o ControlPath='~/test.ssh' your_remote_ip_goes_here "your_long_running_command" &
sleep 100
ssh -o ControlPath='~/test.ssh' -O exit your_remote_ip_goes_here
Моя длительная команда больше не выполнялась, когда соединение было разорвано таким образом.
Пробовал методом
xprop -id $(xdotool getactivewindow) WM_CLASS| awk '{gsub(/[","]/,"",$3);print $3}'
output
kitty
питон
вывод команды "xprop -id $ (xdotool getactivewindow )WM _CLASS" сохраняется в переменной "a"
#!/usr/bin/python
import re
a='"WM_CLASS(STRING) = "kitty", "kitty"'
b=a.split(' ')[2]
print b.replace('"','').replace(",","")
Вам может сойти с рук:
xprop -id $(xdotool getactivewindow) WM_CLASS |
awk -F '"' '{print $2}'
Но и с (более простым):
xprop -id $(xdotool getactivewindow) WM_CLASS |
cut -d '"' -f 2
Или (предупреждение, если регулярное выражение не соответствует, будет напечатан весь ввод)
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed 's/^[^"]*"\([^"]*\)".*$/\1/'
Или снова sed, но более надежный:
xprop -id $(xdotool getactivewindow) WM_CLASS |
sed -n 's/^[^"]*r"\([^"]*\)".*$/\1/p'
Или, даже (не такой надежный )с grep (, а только GNU grep и с регулярным выражением Perl):
xprop -id $(xdotool getactivewindow) WM_CLASS |
grep -Po '^[^"]*"\K[^"]*'
Вы это имеете в виду?
В словах :извлеките строку внутри первой пары кавычек, иначе не получится?
xprop
выводит строки в формате, очень похожем на формат ksh93/zsh/bash $'...'
, заключая в кавычки, где обратная косая черта, управляющие и не -символы ASCII представлены как их ANSI C \\
, \n
, \r
,\t
или \ooo
.
Единственная разница заключается в том, что, поскольку они заключены в двойные кавычки, "
отображается как \"
, а '
отображается как '
вместо \'
, так что это не должно быть слишком сложно преобразовать этот вывод в WM_CLASS=$'...'
для оценки оболочкой.
Однако еще проще (и безопаснее )заставить xprop
выводить его в виде шестнадцатеричных значений и преобразовывать в$'\xHH...'
:
Для имени приложения (первый kitty
в вашем примере):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/\\x0.*/'\''/;s/=/=$'\'/
)"
для имени класса приложения (второй kitty
в вашем примере):
eval "$(
xprop -id "$(xdotool getactivewindow)" -notype 8x WM_CLASS |
sed 's/0x/\\x/g;s/[, ]//g;s/=.*\\x0\(.*\)\\x0/=$'"'\\1'/"
)"
Оба задают переменную оболочки $WM_CLASS
.
Это будет работать независимо от того, какое байтовое значение может содержать свойство.
Предполагается оболочка с поддержкой $'\xHH'
.