web-dev-qa-db-ja.com

コマンドの不要な終了とbashスクリプトでの出力を処理する方法

マウスがそのウィンドウにカーソルを合わせていないときに特定のウィンドウを自動的に非表示にするワンライナースクリプトを作成しました。ウィンドウのマウス位置とジオメトリ、およびその位置(topleftx、toplefty)を取得し、そのジオメトリをウィンドウの開始位置に追加して(bottomrightx、bottomrighty)座標を取得し、マウスがウィンドウ上にあるかどうかを比較します。マウスがウィンドウ上にない場合は、ウィンドウが非表示になります。

スクリプトでウィンドウ情報を抽出するために使用するxprop window infoコマンドは、ウィンドウスタックでウィンドウ名が見つからない場合に失敗するため、機能しますが、1回だけです。エラーメッセージを出力し、--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
kenn

あなたは試すことができます

(xprop -name "kenn" 2>/dev/null || echo "") |...

Xpropが爆破された場合、stderrリダイレクトはエラーを取り除き、||の後の部分が起動します。

1
Harald