我有这个通过键盘快捷键运行的脚本(并切换 Stylus 扩展样式表的开/关***)。它专门用于最大化窗口,因此 xdotool 值不会改变:
#!/bin/bash
xgg="$(xdotool getactivewindow getwindowname)"
if [[ "$xgg" == *" - Mozilla Firefox" ]]
then
xdotool mousemove --sync 18 54 click 1
sleep 0.2
xdotool mousemove --sync 134 85 click 1
sleep 0.2
xdotool mousemove --sync 1365 85 click 1
sleep 0.2
xdotool mousemove --sync 683 384
fi
它检查焦点窗口是否为 Firefox,因为*" - Mozilla Firefox"
,这是 Firefox 窗口标题的结尾,如果匹配,它会执行后续的 xdotool 命令。
我现在希望即使窗口是 Firefox 的隐私浏览实例也能运行 xdotool 命令。
如果我同时打开了常规 Firefox 窗口和私人浏览窗口,wmctrl -l
则会显示以下内容:
$ wmctrl -l
0x0260000b -1 N/A Desktop — Plasma
0x02600016 -1 N/A Plasma
0x03e00018 0 kububb Newest Questions - Ask Ubuntu - Mozilla Firefox
0x03e001cd 0 kububb Newest Questions - Ask Ubuntu - Mozilla Firefox (Private Browsing)
0x05a00006 0 N/A bash: dkb — Konsole
$
脚本需要什么正则表达式来识别窗口标题末尾的- Mozilla Firefox
和?- Mozilla Firefox (Private Browsing)
***我的地址栏左侧有 Stylus 图标。单击图标一次,会出现一个下拉菜单。第二次单击(在下拉菜单的特定区域)可打开/关闭样式表。
答案1
您可以使用星号 ( *
) 通配符。*
可以表示任意数量的字符(包括零个,换句话说,零个或多个字符)。因此,if
看起来像:
if [[ "$xgg" == *" - Mozilla Firefox"* ]]
或者,由于 Mozilla Firefox 只有两种可能性,即Mozilla Firefox
和Mozilla Firefox (Private Browsing)
,因此您可以使用逻辑或来if
更具体地说明。
if [[ "$xgg" = *" - Mozilla Firefox" ]] || [[ "$xgg" = *" - Mozilla Firefox (Private Browsing)" ]]
或者按照DK Bose 的评论:
if [[ "$xgg" == *?(" - Mozilla Firefox"|" - Mozilla Firefox (Private Browsing)") ]]
答案2
只需使用一个 glob(挑剔,但==
采用 glob 而不是正则表达式),允许在之后使用字符串Firefox
:
#!/bin/bash
xgg="$(xdotool getactivewindow getwindowname)"
if [[ "$xgg" = *"Mozilla Firefox"* ]]
then
xdotool mousemove --sync 18 54 click 1
sleep 0.2
xdotool mousemove --sync 134 85 click 1
sleep 0.2
xdotool mousemove --sync 1365 85 click 1
sleep 0.2
xdotool mousemove --sync 683 384
fi
或者,既然您正在使用[[
,那么您可以使用正则表达式匹配:
#!/bin/bash
xgg="$(xdotool getactivewindow getwindowname)"
if [[ "$xgg" =~ "Mozilla Firefox" ]]
then
xdotool mousemove --sync 18 54 click 1
sleep 0.2
xdotool mousemove --sync 134 85 click 1
sleep 0.2
xdotool mousemove --sync 1365 85 click 1
sleep 0.2
xdotool mousemove --sync 683 384
fi