Как обработать нежелательный выход команды и ее вывод в скрипте bash
Я сделал однострочный скрипт для автоматического скрытия определенного окна, когда мышь не наведена на это окно. Он получает положение мыши и геометрию окна и его положение (topleftx,toplefty), я добавляю его геометрию к начальной позиции окна, чтобы получить координаты (bottomrightx, bottomrighty), затем сравнивает, находится ли мышь над окном. Если мышь не находится на окне, она скрывает окно.
Это работает, но только один раз, потому что xprop
Команда window info, которую я использую для извлечения информации об окне в сценарии, завершается ошибкой, если она не находит имя окна в стеке окон. Выводит сообщение об ошибке и --help
сообщение затем выходит.
я нуждаюсь xprop
потому что это единственная команда окна информации, которая дает информацию о decoration id
любого окна. Потому что основные инструменты для работы с окнами в Linux печатают только геометрию и положение окна без его декорирования. Я хотел включить оформление окна для полноты.
Как я могу заставить его работать?
while [ 1 ]
do
string=$(xdotool getmouselocation 2>/dev/null | sed 's/x:\([0-9]\+\)[ \t]y:\([0-9]\+\)[ \t].*/\1;\2/' | tr ';' ',')
string2=$(xdotool getwindowgeometry $(xprop -name "kenn" | grep _COMPIZ_WINDOW_DECOR_INPUT_FRAME | grep -Po ' # \K.*') | grep -Po ': \K.*' |cut -d" " -f1 | tr '\n' ',' | tr 'x' ','| sed 's/-[0-9][0-9]*/0/')
A="$string2$string"
IFS=,
set $A
if [[(($5 -lt $(($1+$3)))) && (($5 -gt $1))]] && [[(($6 -lt $(($2+$4)))) && (( $6 -gt $2 ))]]
then echo "mouse is on the window"
else
then echo "mouse is out of the window"
fi
done
1 ответ
Вы можете попробовать
(xprop -name "kenn" 2>/dev/null || echo "") |...
Перенаправление stderr избавляет от ошибки и части после ||
пинает, если бомбы Xprop.