このスクリプトはすでに存在しますが、機能しません。 if文では数値比較を評価できないからだと思います。
#!/bin/bash
{ read __ WIDTH; read __ HEIGHT; read __ __ BORDER_WIDTH; } < <(xwininfo -id "$(xdotool getactivewindow)" | grep -o -e 'Height:.*' -e 'Width:.*' -e 'Border width:.*')
echo "Height: $HEIGHT, Width: $WIDTH, Border width: $BORDER_WIDTH"
x = 1920
if($WIDTH == x)
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
else
xdotool key Ctrl+F12
fi
この問題をどのように解決できますか?
ベストアンサー1
このスクリプトにはいくつかの問題があります。
bash
test
テストは、[ .. ]
またはで実行してサブシェルを表すことができます[[ .. ]]
。(
)
x = 1920
スペースなしで割り当てると、パラメーターとを含むコマンドが呼び出されます。代わりに使用してください。x
=
1920
x=1920
変数名の前にはドル記号を付ける必要があります。だから
== x
それは悪くも良い== $x
ものでもある。 (算術評価または拡張除外:(( ... ))
または$(( ... ))
、コメントをお寄せいただきありがとうございます。先行は達成するのが難しい)。-eq
=
文字列を比較するには、数字を、と比較する必要があります。あなたの場合でも、数字は同じ方法で保存されるため、うまく機能しますが、概念的に正しい演算子を使用する方が良いでしょう。==
非標準等価物です=
。変数を引用するときは、可能であれば二重引用符を使用することに慣れる必要があります。たとえば、これによりワイルドカードを使用できなくなります。
で始まる行を修正しますx = 1920
。修正されたバージョンは次のとおりです。
x=1920
if [ "$WIDTH" -eq "$x" ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
else
xdotool key Ctrl+F12
fi